ember-mocha
ember-mocha simplifies testing of Ember applications with
Mocha by providing Mocha-specific wrappers around the
helpers contained in
@ember/test-helpers.
Upgrading from an earlier version? Have a look at our
Migration Guide.
Compatibility
- Ember.js v3.4 or above
- Ember CLI v2.13 or above
- Node.js 8 or above
Installation
ember-mocha
is an Ember CLI addon, so install it
as you would any other addon:
$ ember install ember-mocha
Some other addons are detecting the test framework based on the installed
addon names and are expecting ember-cli-mocha
instead. If you have issues
with this then ember install ember-cli-mocha
, which should work exactly
the same.
Usage
The following section describes the use of Ember Mocha with the latest modern
Ember testing APIs, as laid out in the RFCs
232
and
268.
For the older APIs have a look at our Legacy Guide.
Setting the Application
Your tests/test-helper.js
file should look similar to the following, to
correctly setup the application required by @ember/test-helpers
:
import Application from '../app';
import config from '../config/environment';
import { setApplication } from '@ember/test-helpers';
import { start } from 'ember-mocha';
setApplication(Application.create(config.APP));
start();
Also make sure that you have set ENV.APP.autoboot = false;
for the test
environment in your config/environment.js
.
Setup Tests
The setupTest()
function can be used to setup a unit test for any kind
of "module/unit" of your application that can be looked up in a container.
It will setup your test context with:
this.owner
to interact with Ember's Dependency Injection
systemthis.set()
, this.setProperties()
, this.get()
, and this.getProperties()
this.pauseTest()
method to allow easy pausing/resuming of tests
For example, the following is a unit test for the SidebarController
:
import { expect } from 'chai';
import { describe, it } from 'mocha';
import { setupTest } from 'ember-mocha';
describe('SidebarController', function() {
setupTest();
it('exists', function() {
let controller = this.owner.lookup('controller:sidebar');
expect(controller).to.be.ok;
});
});
If you find that test helpers from other addons want you to pass a hooks
object you can do so like this:
let hooks = setupTest();
setupMirage(hooks);
This will make sure that in functions passed to hooks.afterEach()
the
this.owner
and other things that setupTest()
sets up are still available.
Mocha itself runs afterEach
hooks in a different order than QUnit, which is
why this "workaround" is sometimes needed.
Setup Rendering Tests
The setupRenderingTest()
function is specifically designed for tests that
render arbitrary templates, including components and helpers.
It will setup your test context the same way as setupTest()
, and additionally:
- Initializes Ember's renderer to be used with the
Rendering helpers,
specifically
render()
- Adds
this.element
to your test context which returns the DOM element
representing the wrapper around the elements that were rendered via
render()
- sets up the DOM Interaction Helpers
from
@ember/test-helpers
(click()
, fillIn()
, ...)
import { expect } from 'chai';
import { describe, it } from 'mocha';
import { setupRenderingTest } from 'ember-mocha';
import { render } from '@ember/test-helpers';
import hbs from 'htmlbars-inline-precompile';
describe('GravatarImageComponent', function() {
setupRenderingTest();
it('renders', async function() {
await render(hbs`{{gravatar-image}}`);
expect(this.element.querySelector('img')).to.exist;
});
});
Setup Application Tests
The setupApplicationTest()
function can be used to run tests that interact
with the whole application, so in most cases acceptance tests.
On top of setupTest()
it will:
import { expect } from 'chai';
import { describe, it } from 'mocha';
import { setupApplicationTest } from 'ember-mocha';
import { visit, currentURL } from '@ember/test-helpers';
describe('basic acceptance test', function() {
setupApplicationTest();
it('can visit /', async function() {
await visit('/');
expect(currentURL()).to.equal('/');
});
});
Upgrading
For instructions how to upgrade your test suite please read our
Migration Guide.
Contributing
Contributions are welcome. Please follow the instructions below to install and
test this library.
Installation
npm install
Testing
In order to test in the browser:
npm start
... and then visit http://localhost:4200/tests.
In order to perform a CI test:
npm test
Copyright and License
Copyright 2014 Switchfly
This product includes software developed at
Switchfly (http://www.switchfly.com).
NOTICE: Only our own original work is licensed under the terms of the Apache
License Version 2.0. The licenses of some libraries might impose different
redistribution or general licensing terms than those stated in the Apache
License. Users and redistributors are hereby requested to verify these
conditions and agree upon them.