UNPKG

5.78 kBMarkdownView Raw
1# Contributing to Sinon.JS
2
3There are several ways of contributing to Sinon.JS
4
5- Look into [issues tagged `help-wanted`](https://github.com/sinonjs/sinon/issues?q=is%3Aopen+is%3Aissue+label%3A%22Help+wanted%22)
6- Help [improve the documentation](https://github.com/sinonjs/sinon/tree/master/docs) published
7 at [the Sinon.JS website](https://sinonjs.org). [Documentation issues](https://github.com/sinonjs/sinon/issues?q=is%3Aopen+is%3Aissue+label%3ADocumentation).
8- Help someone understand and use Sinon.JS on [Stack Overflow](https://stackoverflow.com/questions/tagged/sinon)
9- Report an issue, please read instructions below
10- Help with triaging the [issues](https://github.com/sinonjs/sinon/issues). The clearer they are, the more likely they are to be fixed soon.
11- Contribute to the code base.
12
13## Contributor Code of Conduct
14
15Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
16
17## Reporting an issue
18
19To save everyone time and make it much more likely for your issue to be understood, worked on and resolved quickly, it would help if you're mindful of [How to Report Bugs Effectively](http://www.chiark.greenend.org.uk/~sgtatham/bugs.html) when pressing the "Submit new issue" button.
20
21As a minimum, please report the following:
22
23- Which environment are you using? Browser? Node? Which version(s)?
24- Which version of SinonJS?
25- How are you loading SinonJS?
26- What other libraries are you using?
27- What you expected to happen
28- What actually happens
29- Describe **with code** how to reproduce the faulty behaviour
30
31See [our issue template](https://github.com/sinonjs/sinon/blob/master/.github/) for all details.
32
33## Contributing to the code base
34
35Pick [an issue](https://github.com/sinonjs/sinon/issues) to fix, or pitch
36new features. To avoid wasting your time, please ask for feedback on feature
37suggestions with [an issue](https://github.com/sinonjs/sinon/issues/new).
38
39Make sure you have read [GitHub's guide on forking](https://guides.github.com/activities/forking/). It explains the general contribution process and key concepts.
40
41### Making a pull request
42
43Please try to [write great commit messages](http://chris.beams.io/posts/git-commit/).
44
45There are numerous benefits to great commit messages
46
47- They allow Sinon.JS users to understand the consequences of updating to a newer version
48- They help contributors understand what is going on with the codebase, allowing features and fixes to be developed faster
49- They save maintainers time when compiling the changelog for a new release
50
51If you're already a few commits in by the time you read this, you can still [change your commit messages](https://help.github.com/articles/changing-a-commit-message/).
52
53Also, before making your pull request, consider if your commits make sense on their own (and potentially should be multiple pull requests) or if they can be squashed down to one commit (with a great message). There are no hard and fast rules about this, but being mindful of your readers greatly help you author good commits.
54
55### Use EditorConfig
56
57To save everyone some time, please use [EditorConfig](http://editorconfig.org), so your editor helps make
58sure we all use the same encoding, indentation, line endings, etc.
59
60### Installation
61
62The Sinon.JS developer environment requires Node/NPM. Please make sure you have
63Node installed, and install Sinon's dependencies:
64
65 $ npm install
66
67This will also install a pre-commit hook, that runs style validation on staged files.
68
69### Compatibility
70
71For details on compatibility and browser support, please see [`COMPATIBILITY.md`](COMPATIBILITY.md)
72
73### Linting and style
74
75Sinon.JS uses [ESLint](http://eslint.org) to keep the codebase free of lint, and uses [Prettier](https://prettier.io) to keep consistent style.
76
77If you are contributing to a Sinon project, you'll probably want to configure your editors ([ESLint](https://eslint.org/docs/user-guide/integrations#editors), [Prettier](https://prettier.io/docs/en/editors.html)) to make editing code a more enjoyable experience.
78
79Both Prettier and ESLint will check the code in pre-commit hooks (when installed) and will be run before unit tests in the CI environment. The build will fail if the source code does not pass the checks.
80
81You can run the linter locally:
82
83```
84$ npm run lint
85```
86
87You can fix a lot of lint violations automatically:
88
89```
90$ npm run lint -- --fix
91```
92
93You can run prettier locally:
94
95```
96$ npm run prettier:check
97```
98
99You can fix style violations automatically:
100
101```
102$ npm run prettier:write
103```
104
105To ensure consistent reporting of lint warnings, you should use the same versions of ESLint and Prettier as defined in `package.json` (which is what the CI servers use).
106
107### Run the tests
108
109Following command runs unit tests in PhantomJS, Node and WebWorker
110
111 $ npm test
112
113##### Testing in development
114
115Sinon.JS uses [Mocha](https://mochajs.org/), please read those docs if you're unfamiliar with it.
116
117If you're doing more than a one line edit, you'll want to have finer control and less restarting of the Mocha
118
119To start tests in dev mode run
120
121 $ npm run test-dev
122
123Dev mode features:
124
125- [watching related files](https://mochajs.org/#w---watch) to restart tests once changes are made
126- using [Min reporter](https://mochajs.org/#min), which cleans the console each time tests run, so test results are always on top
127
128Note that in dev mode tests run only in Node. Before creating your PR please ensure tests are passing in Phantom and WebWorker as well. To check this please use [Run the tests](#run-the-tests) instructions.
129
130### Compiling a built version
131
132Build requires Node. Under the hood [Browserify](http://browserify.org/) is used.
133
134To build run
135
136 $ node build.js