Mocha helpers for testing Ember.js applications
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.
ember-mochais 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-mochainstead. If you have issues with this then
ember install ember-cli-mocha, which should work exactly the same.
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.
Your
tests/test-helper.jsfile 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
testenvironment in your
config/environment.js.
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.ownerto interact with Ember's Dependency Injection system
this.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();
// Replace this with your real tests. 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
hooksobject you can do so like this:
let hooks = setupTest(); setupMirage(hooks);
This will make sure that in functions passed to
hooks.afterEach()the
this.ownerand other things that
setupTest()sets up are still available. Mocha itself runs
afterEachhooks in a different order than QUnit, which is why this "workaround" is sometimes needed.
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:
render()
this.elementto your test context which returns the DOM element representing the wrapper around the elements that were rendered via
render()
@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; }); });
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:
click(),
fillIn(), ...) as well as the Routing Helpers (
visit(),
currentURL(), ...) from
@ember/test-helpers
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('/'); }); });
For instructions how to upgrade your test suite please read our Migration Guide.
Contributions are welcome. Please follow the instructions below to install and test this library.
npm install
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 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.