UNPKG

ember-cli-blueprint-test-helpers

Version:

Blueprint test helpers for ember-cli. Mocks ember-cli for generate and destroy commands.

275 lines (179 loc) 8.43 kB
ember-cli-blueprint-test-helpers ============================================================================== [![npm version](https://badge.fury.io/js/ember-cli-blueprint-test-helpers.svg)](https://badge.fury.io/js/ember-cli-blueprint-test-helpers) [![Build Status](https://travis-ci.org/ember-cli/ember-cli-blueprint-test-helpers.svg?branch=master)](https://travis-ci.org/ember-cli/ember-cli-blueprint-test-helpers) [![Build status](https://ci.appveyor.com/api/projects/status/github/ember-cli/ember-cli-blueprint-test-helpers?svg=true)](https://ci.appveyor.com/project/embercli/ember-cli-blueprint-test-helpers/branch/master) test helpers for [ember-cli](https://github.com/ember-cli/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](https://github.com/ember-cli/ember-cli-blueprint-test-helpers/issues/56). 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`: ```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 ```js 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: ```js 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](https://github.com/emberjs/rfcs/pull/143), you can test them using this option: `{ ìsModuleUnification: true }` ```js 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](http://chaijs.com/) assertion library including the [chai-as-promised](https://github.com/domenic/chai-as-promised) and [chai-files](https://github.com/Turbo87/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 the `ember-cli` dependency - `{Boolean} [options.disabledTasks=['addon-install', 'bower-install', 'npm-install']]` override the mocked installs Defaults to [`lib/helpers/tmp-env.js`](lib/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` or `in-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 to `ember 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 to `ember 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 to `ember 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]` add `usePods` in `.ember-cli` - `{Boolean} [options.podModulePrefix]` set `npodModulePrefix` to `app/pods` in `config/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](https://opensource.org/licenses/MIT).