UNPKG

7.04 kBMarkdownView Raw
1# Developing for Jasmine Core
2
3We welcome your contributions! Thanks for helping make Jasmine a better project for everyone. Please review the backlog and discussion lists before starting work. What you're looking for may already have been done. If it hasn't, the community can help make your contribution better. If you want to contribute but don't know what to work on, [issues tagged ready for work](https://github.com/jasmine/jasmine/labels/ready%20for%20work) should have enough detail to get started.
4
5## Links
6
7- [Jasmine Google Group](http://groups.google.com/group/jasmine-js)
8- [Jasmine-dev Google Group](http://groups.google.com/group/jasmine-js-dev)
9- [Jasmine on PivotalTracker](https://www.pivotaltracker.com/n/projects/10606)
10
11## General Workflow
12
13Please submit pull requests via feature branches using the semi-standard workflow of:
14
15```bash
16git clone git@github.com:yourUserName/jasmine.git # Clone your fork
17cd jasmine # Change directory
18git remote add upstream https://github.com/jasmine/jasmine.git # Assign original repository to a remote named 'upstream'
19git fetch upstream # Fetch changes not present in your local repository
20git merge upstream/master # Sync local master with upstream repository
21git checkout -b my-new-feature # Create your feature branch
22git commit -am 'Add some feature' # Commit your changes
23git push origin my-new-feature # Push to the branch
24```
25
26Once you've pushed a feature branch to your forked repo, you're ready to open a pull request. We favor pull requests with very small, single commits with a single purpose.
27
28## Background
29
30### Directory Structure
31
32* `/src` contains all of the source files
33 * `/src/core` - generic source files
34 * `/src/html` - browser-specific files
35* `/spec` contains all of the tests
36 * mirrors the source directory
37 * there are some additional files
38* `/dist` contains the standalone distributions as zip files
39* `/lib` contains the generated files for distribution as the Jasmine Rubygem and the Python package
40
41### Self-testing
42
43Note that Jasmine tests itself. The files in `lib` are loaded first, defining the reference `jasmine`. Then the files in `src` are loaded, defining the reference `jasmineUnderTest`. So there are two copies of the code loaded under test.
44
45The tests should always use `jasmineUnderTest` to refer to the objects and functions that are being tested. But the tests can use functions on `jasmine` as needed. _Be careful how you structure any new test code_. Copy the patterns you see in the existing code - this ensures that the code you're testing is not leaking into the `jasmine` reference and vice-versa.
46
47### `boot.js`
48
49This file does all of the setup necessary for Jasmine to work. It loads all of the code, creates an `Env`, attaches the global functions, and builds the reporter. It also sets up the execution of the `Env` - for browsers this is in `window.onload`. While the default in `lib` is appropriate for browsers, projects may wish to customize this file.
50
51For example, for Jasmine development there is a different `dev_boot.js` for Jasmine development that does more work.
52
53### Compatibility
54
55Jasmine supports the following environments:
56
57* Browsers
58 * IE10+
59 * Edge Latest
60 * Firefox Latest
61 * Chrome Latest
62 * Safari 8+
63
64* Node.js
65 * 8
66 * 10
67 * 12
68
69## Development
70
71All source code belongs in `src/`. The `core/` directory contains the bulk of Jasmine's functionality. This code should remain browser- and environment-agnostic. If your feature or fix cannot be, as mentioned above, please degrade gracefully. Any code that depends on a browser (specifically, it expects `window` to be the global or `document` is present) should live in `src/html/`.
72
73### Install Dependencies
74
75Jasmine Core relies on Node.js.
76
77To install the Node dependencies, you will need Node.js, Npm, and [Grunt](http://gruntjs.com/), the [grunt-cli](https://github.com/gruntjs/grunt-cli) and ensure that `grunt` is on your path.
78
79 $ npm install --local
80
81...will install all of the node modules locally. Now run
82
83 $ npm test
84
85...you should see tests run and eslint checking formatting.
86
87### How to write new Jasmine code
88
89Or, How to make a successful pull request
90
91* _Do not change the public interface_. Lots of projects depend on Jasmine and if you aren't careful you'll break them
92* _Be environment agnostic_ - server-side developers are just as important as browser developers
93* _Be browser agnostic_ - if you must rely on browser-specific functionality, please write it in a way that degrades gracefully
94* _Write specs_ - Jasmine's a testing framework; don't add functionality without test-driving it
95* _Write code in the style of the rest of the repo_ - Jasmine should look like a cohesive whole
96* _Ensure the *entire* test suite is green_ in all the big browsers, Node, and ESLint - your contribution shouldn't break Jasmine for other users
97
98Follow these tips and your pull request, patch, or suggestion is much more likely to be integrated.
99
100### Running Specs
101
102Jasmine uses some internal tooling to test itself in browser on Travis. This tooling _should_ work locally as well.
103
104 $ node ci.js
105
106You can also set the `JASMINE_BROWSER` environment variable to specify which browser should be used.
107
108The easiest way to run the tests in **Internet Explorer** is to run a VM that has IE installed. It's easy to do this with VirtualBox.
109
1101. Download and install [VirtualBox](https://www.virtualbox.org/wiki/Downloads).
1111. Download a VM image [from Microsoft](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/). Select "VirtualBox" as the platform.
1121. Unzip the downloaded archive. There should be an OVA file inside.
1131. In VirtualBox, choose `File > Import Appliance` and select the OVA file. Accept the default settings in the dialog that appears. Now you have a Windows VM!
1141. Run the VM and start IE.
1151. With `npm run serve` running on your host machine, navigate to `http://10.0.2.2:8888` in IE.
116
117## Before Committing or Submitting a Pull Request
118
1191. Ensure all specs are green in browser *and* node
1201. Ensure eslint and prettier are clean as part of your `npm test` command. You can run `npm run cleanup` to have prettier re-write the files.
1211. Build `jasmine.js` with `npm run build` and run all specs again - this ensures that your changes self-test well
1221. Revert your changes to `jasmine.js` and `jasmine-html.js`
123 * We do this because `jasmine.js` and `jasmine-html.js` are auto-generated (as you've seen in the previous steps) and accepting multiple pull requests when this auto-generated file changes causes lots of headaches
124 * When we accept your pull request, we will generate these files as a separate commit and merge the entire branch into master
125
126Note that we use Travis for Continuous Integration. We only accept green pull requests.
127