QUnit helpers for testing Ember.js applications
npm install ember-qunit[![Latest NPM release][npm-badge]][npm-badge-url]
[![CI Build Status][ci-badge]][ci-badge-url]
[npm-badge]: https://img.shields.io/npm/v/ember-qunit.svg
[npm-badge-url]: https://www.npmjs.com/package/ember-qunit
[ci-badge]: https://github.com/emberjs/ember-qunit/workflows/CI/badge.svg
[ci-badge-url]: https://github.com/emberjs/ember-qunit/actions?query=workflow%3ACI
ember-qunit simplifies testing of Ember applications with
QUnit by providing QUnit-specific wrappers around the
helpers contained in
ember-test-helpers.
Requirements
------------------------------------------------------------------------------
* Ember.js v4.0 or above
* Ember Auto Import v2 or above (or Embroider)
* Node.js v16 or above
- TypeScript 4.8 and 4.9
- SemVer policy: simple majors
- The public API is defined by the Usage section below.
* ember-cli ~v4.8.1, ~v4.12.2, >= v5.1
If you need support for Node 14 please use v6.2 of this addon.
If you need support for Node 13 or older Ember CLI versions please use v4.x
of this addon.
Installation
------------------------------------------------------------------------------
ember-qunit is an Ember CLI addon, so install it
as you would any other addon:
``sh`
$ ember install ember-qunit
Some other addons are detecting the test framework based on the installed
addon names and are expecting ember-cli-qunit instead. If you have issuesember install ember-cli-qunit
with this then , which should work exactly
the same.
Upgrading
------------------------------------------------------------------------------
For instructions how to upgrade to the latest version, please read our
Migration Guide.
Usage
------------------------------------------------------------------------------
The following section describes the use of ember-qunit 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.js file should look similar to the following, to@ember/test-helpers
correctly setup the application required by :
`javascript
import Application from '../app';
import config from '../config/environment';
import { setApplication } from '@ember/test-helpers';
import { start } from 'ember-qunit';
setApplication(Application.create(config.APP));
start();
`
Also make sure that you have set ENV.APP.autoboot = false; for the testconfig/environment.js
environment in your .
In environments that use the AMD Loader, loadTests() will need to be calledstart()
before .
`javascript
import Application from '../app';
import config from '../config/environment';
import { setApplication } from '@ember/test-helpers';
import { start } from 'ember-qunit';
import { loadTests } from 'ember-qunit/test-loader';
setApplication(Application.create(config.APP));
loadTests()
start();
`
In ESM environments, this isn't needed as import.meta.glob can load test files.
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 Injectionthis.set()
system
* , 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:
`javascript
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('SidebarController', function(hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('exists', function() {
let controller = this.owner.lookup('controller:sidebar');
assert.ok(controller);
});
});
`
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()@ember/test-helpers
* sets up the DOM Interaction Helpers
from (click(), fillIn(), ...)
`javascript
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { render, find } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
module('GravatarImageComponent', function(hooks) {
setupRenderingTest(hooks);
test('renders', async function() {
await render(hbs{{gravatar-image}});`
assert.ok(find('img'));
});
});
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:
* Boot your application instance
* Set up all the DOM Interaction Helpers
(click(), fillIn(), ...) as well as the Routing Helpersvisit()
(, currentURL(), ...) from @ember/test-helpers
`javascript
import { module, test } from 'qunit';
import { setupApplicationTest } from 'ember-qunit';
import { visit, currentURL } from '@ember/test-helpers';
module('basic acceptance test', function(hooks) {
setupApplicationTest(hooks);
test('can visit /', async function(assert) {
await visit('/');
assert.equal(currentURL(), '/');
});
});
`
Configuration is optionally managed via @embroider/macros
To configure ember-qunit, in your ember-cli-build.js, add:`js
'use strict';
const EmberApp = require('ember-cli/lib/broccoli/ember-app');
module.exports = function (defaults) {
const app = new EmberApp(defaults, {
'@embroider/macros': {
setConfig: {
'ember-qunit': {
/**
* default: false
*
* removes the CSS for the test-container (where the app and components are rendered to)
*/
disableContainerStyles: true,
/**
* default: 'qunit-default'
* options: 'qunit-default' | 'ember'
*
* Sets the theme for the Web UI of the test runner. Use a different value to disable loading any theme, allowing you to provide your own external one.
*/
theme: 'qunit-default',
},
},
},
/ ... /
});
/ ... /
};
`
Contributing
------------------------------------------------------------------------------
* git clone cd ember-qunit
* pnpm install
*
* pnpm test (Runs ember try:each to test your addon against multiple Ember versions)ember test
* ember test --server
*
* ember serve`
* Visit the dummy application at http://localhost:4200.
For more information on using ember-cli, visit https://ember-cli.com/.