ember-cli-blueprint-test-helpers
test helpers for ember-cli blueprints
Installation
ember install ember-cli-blueprint-test-helpersIt 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 --recursiveFor 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-blueprintwhich 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} scopethe 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-clidependency
- {Boolean} [options.disabledTasks=['addon-install', 'bower-install', 'npm-install']]override the mocked installs Defaults to- 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,- addonor- 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>} argsarguments 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>} argsarguments 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>} argsarguments to pass to- ember generate(e.g.- ['my-blueprint', 'foo'])
- {Function} assertionCallbackthe 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>} packagesthe 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- usePodsin- .ember-cli
- {Boolean} [options.podModulePrefix]set- npodModulePrefixto- app/podsin- 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.
 ember-cli
ember-cli