generator-react-webpack/test/test-creation.js
Simon Bailey b59380a08d Fixes #2
Signed-off-by: Simon Bailey <simon@newtriks.com>
2014-01-08 15:27:24 +00:00

102 lines
3.9 KiB
JavaScript

/*global describe, beforeEach, it*/
'use strict';
var path = require('path');
var helpers = require('yeoman-generator').test;
var _ = require('underscore.string');
describe('react-webpack generator', function () {
var react;
beforeEach(function (done) {
var deps = [
'../../app',
'../../common',
'../../component',
'../../main'
];
helpers.testDirectory(path.join(__dirname, 'temp-test'), function (err) {
if (err) {
return done(err);
}
react = helpers.createGenerator('react-webpack:app', deps);
react.options['skip-install'] = true;
done();
}.bind(this));
});
it('should generate dotfiles', function (done) {
react.run({}, function () {
helpers.assertFiles(['.gitignore', '.editorconfig', '.jshintrc']);
done();
});
});
it('creates expected files', function (done) {
var expected = ['src/favicon.ico',
'src/styles/reset.css',
'src/styles/main.css',
'src/index.html',
'Gruntfile.js',
'karma.conf.js',
'package.json',
'package.json',
'src/scripts/components/TempTestApp.js',
'test/helpers/phantomjs-shims.js',
'test/helpers/react/addons.js'
];
react.run({}, function () {
helpers.assertFiles(expected);
done();
});
});
/**
* Generic test function that can be used to cover the scenarios where a generator is creating both a source file
* and a test file. The function will run the respective generator, and then check for the existence of the two
* generated files. A RegExp check is done on each file, checking for the generated content with a pattern.
*
* The number of parameters is quite huge due to the many options in which the generated files differ,
* e.g. Components start with an upper case letter.
*
* The generated items all use the dummy name 'foo'.
*
* @param generatorType The type of generator to run, e.g. 'component'.
* @param specType The type of the generated spec file, e.g. 'component'.
* @param targetDirectory The directory into which the files are generated, e.g. 'components' - this will be
* located under 'src/scripts/components' for the sources and 'test/spec/components' for the tests.
* @param scriptNameFn The function used to create the name of the created item, e.g. _.classify to generate 'Foo',
* or _.camelize to generate 'foo'.
* @param specNameFn Same as scriptNameFn, but for the describe text used in the Spec file. Some generators use
* _.classify, others use _.camelize.
* @param suffix An optional suffix to be appended to the generated item name.
* @param done The done function.
*/
function generatorTest(generatorType, specType, targetDirectory, scriptNameFn, specNameFn, suffix, done) {
var reactGenerator;
var name = 'Foo';
var deps = [path.join('../..', generatorType)];
reactGenerator = helpers.createGenerator('react-webpack:' + generatorType, deps, [name]);
react.run([], function () {
//var Foo = React.createClass({
reactGenerator.run([], function () {
helpers.assertFiles([
[path.join('src/scripts', targetDirectory, name + '.js'), new RegExp('var ' + scriptNameFn(name) + suffix, 'g')],
[path.join('test/spec', targetDirectory, name + '.js'), new RegExp('describe\\(\'' + specNameFn(name) + suffix + '\'', 'g')]
]);
done();
});
});
}
describe('Component', function () {
it('should generate a new component', function (done) {
generatorTest('component', 'component', 'components', _.capitalize, _.capitalize, '', done);
});
});
});