ember-cli-blueprint-test-helpers
v0.19.2
Published
Blueprint test helpers for ember-cli. Mocks ember-cli for generate and destroy commands.
Downloads
10,280
Readme
ember-cli-blueprint-test-helpers
test helpers for ember-cli blueprints
Installation
ember install ember-cli-blueprint-test-helpers
It should be noted that ember-cli-blueprint-test-helpers
currently
only works for testing blueprints inside addon projects.
Usage
Running Tests
The blueprint tests can be run by:
node_modules/.bin/mocha node-tests --recursive
For convenience you should add the following to your package.json
:
"scripts": {
"nodetest": "mocha node-tests --recursive"
}
to be able to use npm run nodetest
to run the tests.
Generating Tests
Generate a blueprint test scaffold using the blueprint-test
generator:
ember generate blueprint-test my-blueprint
which will generate a test file at node-tests/blueprints/my-blueprint-test.js
.
Example Usage
describe('Acceptance: ember generate and destroy my-blueprint', function() {
// create and destroy temporary working directories
setupTestHooks(this);
it('my-blueprint foo', function() {
const args = ['my-blueprint', 'foo'];
// create a new Ember.js app in the working directory
return emberNew()
// then generate and destroy the `my-blueprint` blueprint called `foo`
.then(() => emberGenerateDestroy(args, (file) => {
// and run some assertions in between
expect(file('path/to/file.js'))
.to.contain('file contents to match')
.to.contain('more file contents\n');
}));
// magically done for you: assert that the generated files are destroyed again
});
});
or more explicitly:
describe('Acceptance: ember generate and destroy my-blueprint', function() {
// create and destroy temporary working directories
setupTestHooks(this);
it('my-blueprint foo', function() {
const args = ['my-blueprint', 'foo'];
// create a new Ember.js app in the working directory
return emberNew()
// then generate the `my-blueprint` blueprint called `foo`
.then(() => emberGenerate(args))
// then assert that the files were generated correctly
.then(() => expect(file('path/to/file.js'))
.to.contain('file contents to match')
.to.contain('more file contents\n'))
// then destroy the `my-blueprint` blueprint called `foo`
.then(() => emberDestroy(args))
// then assert that the files were destroyed correctly
.then(() => expect(file('path/to/file.js')).to.not.exist);
});
});
if your blueprints support the new
MU file structure, you can test them
using this option: { ìsModuleUnification: true }
describe('Acceptance: ember generate and destroy my-blueprint', function() {
// create and destroy temporary working directories
setupTestHooks(this);
it('my-blueprint foo', function() {
const args = ['my-blueprint', 'foo'];
// create a new Ember.js app in the working directory
// this app will have MU file structure, namely a `src` directory
return emberNew({ isModuleUnification: true })
// then generate the `my-blueprint` blueprint called `foo`
.then(() => emberGenerate(args, { isModuleUnification: true }))
// then assert that the files were generated correctly
.then(() => expect(file('path/to/file.js'))
.to.contain('file contents to match')
.to.contain('more file contents\n'))
// then destroy the `my-blueprint` blueprint called `foo`
.then(() => emberDestroy(args, { isModuleUnification: true }))
// then assert that the files were destroyed correctly
.then(() => expect(file('path/to/file.js')).to.not.exist);
});
});
API Reference
This project exports two major API endpoints for you to use:
require('ember-cli-blueprint-test-helpers/chai')
This endpoint exports the Chai assertion library including the chai-as-promised and chai-files plugins
require('ember-cli-blueprint-test-helpers/helpers')
This endpoint exports the functions mentioned in the following API reference
setupTestHooks(scope, options)
Prepare the test context for the blueprint tests.
Parameters:
{Object} scope
the test context (i.e.this
){Object} [options]
optional parameters{Number} [options.timeout=20000]
the test timeout in milliseconds{Object} [options.tmpenv]
object containing info about the temporary directory for the test.{String} [options.cliPath='ember-cli']
path to theember-cli
dependency{Boolean} [options.disabledTasks=['addon-install', 'bower-install', 'npm-install']]
override the mocked installs Defaults tolib/helpers/tmp-env.js
Returns: {Promise}
emberNew(options)
Create a new Ember.js app or addon in the current working directory.
Parameters:
{Object} [options]
optional parameters{String} [options.target='app']
the type of project to create (app
,addon
orin-repo-addon
){Boolean} [options.isModuleUnification=true]
a toggle to use MU file structure
Returns: {Promise}
emberGenerate(args, options)
Run a blueprint generator.
Parameters:
{Array.<String>} args
arguments to pass toember generate
(e.g.['my-blueprint', 'foo']
){Object} [options]
optional parameters{Boolean} [options.isModuleUnification=true]
a toggle to use MU file structure
Returns: {Promise}
emberDestroy(args, options)
Run a blueprint destructor.
Parameters:
{Array.<String>} args
arguments to pass toember destroy
(e.g.['my-blueprint', 'foo']
){Object} [options]
optional parameters{Boolean} [options.isModuleUnification=true]
a toggle to use MU file structure
Returns: {Promise}
emberGenerateDestroy(args, assertionCallback, options)
Run a blueprint generator and the corresponding blueprint destructor while checking assertions in between.
Parameters:
{Array.<String>} args
arguments to pass toember generate
(e.g.['my-blueprint', 'foo']
){Function} assertionCallback
the callback function in which the assertions should happen{Object} [options]
optional parameters{Boolean} [options.isModuleUnification=true]
a toggle to use MU file structure
Returns: {Promise}
modifyPackages(packages)
Modify the dependencies in the package.json
file of the test project.
Parameters:
{Array.<Object>} packages
the list of packages that should be added, changed or removed
setupPodConfig(options)
Setup usePods
in .ember-cli
and/or podModulePrefix
in environment.js
.
Parameters:
{Object} [options]
optional parameters{Boolean} [options.usePods]
addusePods
in.ember-cli
{Boolean} [options.podModulePrefix]
setnpodModulePrefix
toapp/pods
inconfig/environment.js
Used by
- https://github.com/emberjs/ember.js
- https://github.com/emberjs/data
- https://github.com/ember-cli/ember-cli-legacy-blueprints
- https://github.com/simplabs/ember-simple-auth
- https://github.com/DockYard/ember-suave
License
This project is licensed under the MIT License.