diff --git a/.npmignore b/.npmignore index fa8b147..2a7c5fb 100644 --- a/.npmignore +++ b/.npmignore @@ -14,3 +14,4 @@ bower.json ember-cli-build.js testem.js +node-tests/ \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index caf4b7c..952f189 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,3 +33,4 @@ install: script: - ember try $EMBER_TRY_SCENARIO test + - npm run nodetest diff --git a/node-tests/blueprints/adapter-test.js b/node-tests/blueprints/adapter-test.js new file mode 100644 index 0000000..be54268 --- /dev/null +++ b/node-tests/blueprints/adapter-test.js @@ -0,0 +1,24 @@ +'use strict'; + +var setupTestHooks = require('ember-cli-blueprint-test-helpers/lib/helpers/setup'); +var BlueprintHelpers = require('ember-cli-blueprint-test-helpers/lib/helpers/blueprint-helper'); +var generateAndDestroy = BlueprintHelpers.generateAndDestroy; + +describe('Acceptance: ember generate and destroy adapter', function() { + setupTestHooks(this); + + it('adapter foo', function() { + return generateAndDestroy(['adapter', 'foo'], { + files: [ + { + file: 'app/adapters/foo.coffee', + contains: [ + "`import ApplicationAdapter from './application'`", + 'FooAdapter = ApplicationAdapter.extend()', + "`export default FooAdapter`" + ] + } + ] + }); + }); +}); diff --git a/node-tests/blueprints/component-test.js b/node-tests/blueprints/component-test.js new file mode 100644 index 0000000..d679624 --- /dev/null +++ b/node-tests/blueprints/component-test.js @@ -0,0 +1,30 @@ +'use strict'; + +var setupTestHooks = require('ember-cli-blueprint-test-helpers/lib/helpers/setup'); +var BlueprintHelpers = require('ember-cli-blueprint-test-helpers/lib/helpers/blueprint-helper'); +var generateAndDestroy = BlueprintHelpers.generateAndDestroy; + +describe('Acceptance: ember generate and destroy component', function() { + setupTestHooks(this); + + it('component foo-thing app', function() { + // pass any additional command line options in the arguments array + return generateAndDestroy(['component', 'foo-thing'], { + // define files to assert, and their contents + files: [ + { + file: 'app/components/foo-thing.js', + contains: [ + "`import Ember from 'ember'`", + "FooThingComponent = Ember.Component.extend()", + "`export default FooThingComponent`" + ] + } + ] + }); + }); + + // TODO: + // - Test no hyphen in component name + // - Test component in addon - should define +}); diff --git a/node-tests/fixtures/addon/package/package.json b/node-tests/fixtures/addon/package/package.json new file mode 100644 index 0000000..d21ce66 --- /dev/null +++ b/node-tests/fixtures/addon/package/package.json @@ -0,0 +1,22 @@ +{ + "name": "my-addon", + "version": "0.0.0", + "description": "Addon fixture package for ember-cli-blueprint-test-helpers", + "engines": { + "node": ">= 0.10.0" + }, + "devDependencies": { + "ember-cli": "*", + "ember-cli-coffeescript": "*" + }, + "keywords": [ + "ember-addon" + ], + "dependencies": { + "ember-cli-htmlbars": "*", + "ember-cli-babel": "*" + }, + "ember-addon": { + "configPath": "tests/dummy/config" + } +} diff --git a/node-tests/fixtures/app/package/package.json b/node-tests/fixtures/app/package/package.json new file mode 100644 index 0000000..020170f --- /dev/null +++ b/node-tests/fixtures/app/package/package.json @@ -0,0 +1,13 @@ +{ + "name": "my-app", + "version": "0.0.0", + "description": "App fixture package for ember-cli-blueprint-test-helpers", + "private": true, + "engines": { + "node": ">= 0.10.0" + }, + "devDependencies": { + "ember-cli": "*", + "ember-cli-coffeescript": "*" + } +} diff --git a/node-tests/nodetest-runner.js b/node-tests/nodetest-runner.js new file mode 100644 index 0000000..05b1299 --- /dev/null +++ b/node-tests/nodetest-runner.js @@ -0,0 +1,74 @@ +'use strict'; + +var glob = require('glob'); +var Mocha = require('mocha'); +var Promise = require('ember-cli/lib/ext/promise'); +var rimraf = require('rimraf'); +var mochaOnlyDetector = require('mocha-only-detector'); + +if (process.env.EOLNEWLINE) { + require('os').EOL = '\n'; +} + +rimraf.sync('.node_modules-tmp'); +rimraf.sync('.bower_components-tmp'); + +var root = 'node-tests/{blueprints,acceptance,unit}'; +var _checkOnlyInTests = Promise.denodeify(mochaOnlyDetector.checkFolder.bind(null, root + '/**/*{-test}.js')); +var optionOrFile = process.argv[2]; +var mocha = new Mocha({ + timeout: 5000, + reporter: 'spec' +}); +var testFiles = glob.sync(root + '/**/*-test.js'); +/*var jshintPosition = testFiles.indexOf('tests/unit/jshint-test.js'); +var jshint = testFiles.splice(jshintPosition, 1); + +testFiles = jshint.concat(testFiles); +*/ +if (optionOrFile === 'all') { + addFiles(mocha, testFiles); + addFiles(mocha, 'node-tests/**/*-test.js'); + addFiles(mocha, '/**/*-test-slow.js'); +} else if (process.argv.length > 2) { + addFiles(mocha, process.argv.slice(2)); +} else { + addFiles(mocha, testFiles); +} + +function addFiles(mocha, files) { + files = (typeof files === 'string') ? glob.sync(root + files) : files; + files.forEach(mocha.addFile.bind(mocha)); +} + +function checkOnlyInTests() { + console.log('Verifing `.only` in tests'); + return _checkOnlyInTests().then(function() { + console.log('No `.only` found'); + }); +} + +function runMocha() { + mocha.run(function(failures) { + process.on('exit', function() { + process.exit(failures); + }); + }); +} + +function ciVerificationStep() { + if (process.env.CI === 'true') { + return checkOnlyInTests(); + } else { + return Promise.resolve(); + } +} + +ciVerificationStep() + .then(function() { + runMocha(); + }) + .catch(function(error) { + console.error(error); + process.exit(1); + }); diff --git a/package.json b/package.json index fb3bc5a..f30bd2c 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "scripts": { "build": "ember build", "start": "ember server", - "test": "ember try:testall" + "test": "ember try:testall", + "nodetest": "node node-tests/nodetest-runner.js" }, "repository": { "type": "git", @@ -30,10 +31,12 @@ "ember-cli": "2.4.1", "ember-cli-app-version": "^1.0.0", "ember-cli-babel": "^5.1.5", + "ember-cli-blueprint-test-helpers": "0.9.0", "ember-cli-dependency-checker": "^1.2.0", "ember-cli-htmlbars": "^1.0.1", "ember-cli-htmlbars-inline-precompile": "^0.3.1", "ember-cli-inject-live-reload": "^1.3.1", + "ember-cli-internal-test-helpers": "0.7.0", "ember-cli-qunit": "^1.2.1", "ember-cli-release": "0.2.8", "ember-cli-sri": "^2.1.0", @@ -43,7 +46,11 @@ "ember-load-initializers": "^0.5.0", "ember-resolver": "^2.0.3", "ember-try": "^0.1.2", - "loader.js": "^4.0.0" + "glob": "5.0.13", + "loader.js": "^4.0.0", + "mocha": "2.4.5", + "mocha-only-detector": "0.0.2", + "rimraf": "2.5.2" }, "keywords": [ "ember-addon",