/meteor-jasmine

Easily and securely use Jasmine within client side Meteor

Primary LanguageJavaScriptMIT LicenseMIT

jasmine

Easily write and run Jasmine client and server unit and integration tests. You can use all Jasmine 2.0 features.

Installation

meteor add sanjo:jasmine
meteor add velocity:html-reporter

Usage

Tests run automatically while the app runs in development mode locally. You can see the test results in the terminal and in the html-reporter overlay.

Further reading

Examples and Tutorials

Testing modes

Each testing mode has different characteristics. Each testing mode has an own folder.

Server

Server Unit Test Mode
  • You can unit test server app code.
  • The tests run isolated from your app.
  • The Meteor API and all packages are stubbed in this mode.
  • Place your server unit tests in the folder tests/jasmine/server/unit/ or a subfolder of it.
Server Integration Test Mode

Not available yet. Will be added in the near future.

Client

Client Unit Test Mode
  • You can test client code.
  • The tests are executed directly inside the browser.
  • Nothing is automatically stubbed.
  • Place your client unit tests in the folder tests/jasmine/client/unit/ or a subfolder of it.

Note: Tests currently only run in Google Chrome. If you need support for another Browser please open an issue.

Client Integration Test Mode
  • You can test client code.
  • The tests are executed directly inside the browser in a copy of your app.
  • Nothing is automatically stubbed.
  • Place your client integration tests in the folder tests/jasmine/client/integration/ or a subfolder of it.

Tip: Use this mode when you want to test the communication between client and server. In other cases you should probably use the Client Unit Test mode.

Running tests once (for Continuous Integration)

Use the commmand:

JASMINE_SINGLE_RUN=1 meteor --test
``

### Stubs

Files in `tests/jasmine` folder (or a subfolder of it) that end with `-stubs.js` or `-stub.js` are treated as stubs and are loaded before the app code.

### Mocks

#### Mocking Meteor

This package ships with mocks for the Meteor API. You can mock the Meteor API in your tests with:

```javascript
beforeEach(function () {
  MeteorStubs.install();
});

afterEach(function () {
  MeteorStubs.uninstall();
});

This is done automatically for server unit tests. You need to do it yourself for your client tests if you want to write unit tests that run in the browser.

Mocking objects

You can mock any object with the global helper function mock. This will avoid unwanted side effects that can affect other tests. Here is an example how to mock the Players collection of the Leaderboard example:

beforeEach(function () {
  mock(window, 'Players');
});

This will mock the Players collection for each test. The original Players collection is automatically restored after each test.

Creating more complex mocks

You can also create mocks manually. I would suggest to use the following pattern:

Create a mock service with a method install and uninstall (example for Meteor)

  • install: Saves the original object and mocks it
  • uninstall: Restores the original object

This pattern allows you to enable mocks only for specific tests and have a clean and independent mock for each test.

Copyright

The code is licensed under the MIT License (see LICENSE file).

The boot.js scripts are based on code that is part of Jasmine 2.0 (LICENSE).