# Contributing

## Issues
Found an issue? Missing a feature or something else? We look forward to receive your feedback.

For bug reports please make sure that you
* clearly describe your problem
* provide us something that allows us to reproduce the problem (a minimal failing example would be awesome)

## Pull Requests

We love pull requests. Here's a quick guide:

1. Fork the repo.

1. Run the tests. We only take pull requests with passing tests, and it's great to know that you have a clean state.

1. Add a test for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, we need a test to avoid regressions in future releases.

1. Make the test pass.

1. Push to your fork and submit a pull request.

### How to run tests

1. Make sure you have all dependencies installed
  ```bash
  $ yarn install
  ```

1. Run the tests with:
  ```bash
  $ yarn run test
  ```

### How to test against your project

Wanna test your changes against your real world project? No Problem!

Let's use `yarn link` to symlink the fork into your project.

1. switch to the root of this project

1. make sure you have all dependencies installed
  ```bash
  $ yarn install
  ```

1. run first step for yarn link
  ```bash
  $ yarn link
  ```

1. switch to your real world project

1. and execute the second step for yarn link
  ```bash
  $ yarn link mochapack
  ```

1. You need to configure loader resolution in your webpack config, like below
  ```js
  var path = require('path');

  module.exports = {
    // ..
    // yarn link mochapack hack
    resolveLoader: {
      root: [
       // __dirname is the root of your project, you may need to adjust the path
       path.join(__dirname, "node_modules")
      ]
    };
    // ..
  };
  ```

1. Then you are almost ready to go. You just have to build this project initially and whenever you make code changes.
  ```bash
  $ yarn run build
  ```



### Syntax rules

Please pay attention on the following syntax rules:

* Basic coding styles are defined within the .editorconfig file.
* ESLint automatically checks the code style after tests or manually via `yarn run lint`.
* Follow the conventions used in the source already.