Bug 1242905 - Use ngreact-test-utils for ngreact tests

Introduces the ngreact-test-utils npm package to supply reusable
compile() and simulate() functions for testing ngreact components. This
requires browserify, which is now applied to tests in
tests/ui/unit/react only.
This commit is contained in:
Casey Williams 2017-01-02 15:04:49 -08:00 коммит произвёл camd
Родитель b9622d78f1
Коммит 68b4753353
4 изменённых файлов: 2313 добавлений и 318 удалений

2596
npm-shrinkwrap.json сгенерированный

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -25,17 +25,23 @@
"load-grunt-tasks": "3.5.2" "load-grunt-tasks": "3.5.2"
}, },
"devDependencies": { "devDependencies": {
"browserify": "^13.1.1",
"eslint": "3.8.0", "eslint": "3.8.0",
"grunt-eslint": "19.0.0", "grunt-eslint": "19.0.0",
"grunt-html-angular-validate": "0.5.8", "grunt-html-angular-validate": "0.5.8",
"jasmine-core": "2.5.2", "jasmine-core": "2.5.2",
"karma": "1.3.0", "karma": "1.3.0",
"karma-browserify": "^5.1.0",
"karma-coverage": "1.1.1", "karma-coverage": "1.1.1",
"karma-firefox-launcher": "1.0.0", "karma-firefox-launcher": "1.0.0",
"karma-jasmine": "1.0.2", "karma-jasmine": "1.0.2",
"karma-junit-reporter": "1.0.0", "karma-junit-reporter": "1.0.0",
"karma-ng-scenario": "0.1.0", "karma-ng-scenario": "0.1.0",
"minimist": "1.2.0" "minimist": "1.2.0",
"ngreact-test-utils": "^1.0.3",
"react": "^15.3.1",
"react-dom": "^15.4.1",
"watchify": "^3.8.0"
}, },
"scripts": { "scripts": {
"test": "karma start tests/ui/config/karma.conf.js --single-run --browsers Firefox" "test": "karma start tests/ui/config/karma.conf.js --single-run --browsers Firefox"

Просмотреть файл

@ -6,7 +6,7 @@
module.exports = function (config) { module.exports = function (config) {
config.set({ config.set({
frameworks: ['jasmine'], frameworks: ['jasmine', 'browserify'],
basePath: '../../../', basePath: '../../../',
@ -57,7 +57,12 @@ module.exports = function (config) {
reporters: ['progress', 'coverage'], reporters: ['progress', 'coverage'],
preprocessors: { preprocessors: {
'ui/js/**/*.js': ['coverage'] 'ui/js/**/*.js': ['coverage'],
'tests/ui/unit/react/**/*.js': ['browserify']
},
browserify: {
debug: true
} }
}); });
}; };

Просмотреть файл

@ -1,14 +1,15 @@
'use strict'; 'use strict';
var compile = require('ngreact-test-utils').compile;
describe('Revision list react component', () => { describe('Revision list react component', () => {
var $filter; var $filter;
var compile, mockData; var mockData;
beforeEach(module('treeherder')); beforeEach(angular.mock.module('treeherder'));
beforeEach(module('react')); beforeEach(angular.mock.module('react'));
beforeEach(inject((_$filter_) => { beforeEach(inject((_$filter_) => {
$filter = _$filter_; $filter = _$filter_;
})); }));
beforeEach(inject(() => { beforeEach(() => {
var resultset = { var resultset = {
"id": 151371, "id": 151371,
"revision_hash": "0056da58e1efd70711c8f98336eaf866f1aa8936", "revision_hash": "0056da58e1efd70711c8f98336eaf866f1aa8936",
@ -61,28 +62,17 @@ describe('Revision list react component', () => {
resultset, resultset,
repo repo
}; };
})); });
beforeEach(inject(($rootScope, $timeout, $compile) => {
compile = function(el, scope) {
var $scope = $rootScope.$new();
$scope = _.extend($scope, scope);
var compiledEl = $compile(el)($scope);
$timeout.flush();
$scope.$digest();
return compiledEl;
};
}));
it('renders the correct number of revisions in a list', () => { it('renders the correct number of revisions in a list', () => {
var component = compile('<revisions repo="repo" resultset="resultset" />', mockData); var component = compile('<revisions repo="repo" resultset="resultset" />', mockData);
var revisionItems = component[0].querySelectorAll('li'); var revisionItems = component.el[0].querySelectorAll('li');
expect(revisionItems.length).toEqual(mockData['resultset']['revision_count']); expect(revisionItems.length).toEqual(mockData['resultset']['revision_count']);
}); });
it('renders the linked revision hashes', () => { it('renders the linked revision hashes', () => {
var component = compile('<revisions repo="repo" resultset="resultset" />', mockData); var component = compile('<revisions repo="repo" resultset="resultset" />', mockData);
var links = component[0].querySelectorAll('.revision-holder a'); var links = component.el[0].querySelectorAll('.revision-holder a');
expect(links.length).toEqual(mockData['resultset']['revision_count']); expect(links.length).toEqual(mockData['resultset']['revision_count']);
Array.prototype.forEach.call(links, (link, i) => { Array.prototype.forEach.call(links, (link, i) => {
expect(link.href).toEqual(mockData.repo.getRevisionHref()); expect(link.href).toEqual(mockData.repo.getRevisionHref());
@ -92,7 +82,7 @@ describe('Revision list react component', () => {
it('renders the contributors\' initials', () => { it('renders the contributors\' initials', () => {
var component = compile('<revisions repo="repo" resultset="resultset" />', mockData); var component = compile('<revisions repo="repo" resultset="resultset" />', mockData);
var initials = component[0].querySelectorAll('.label.label-initials'); var initials = component.el[0].querySelectorAll('.label.label-initials');
expect(initials.length).toEqual(mockData.resultset.revision_count); expect(initials.length).toEqual(mockData.resultset.revision_count);
Array.prototype.forEach.call(initials, (initial, i) => { Array.prototype.forEach.call(initials, (initial, i) => {
var revisionData = mockData.resultset.revisions[i]; var revisionData = mockData.resultset.revisions[i];
@ -112,7 +102,7 @@ describe('Revision list react component', () => {
mockData.resultset.revision_count = 21; mockData.resultset.revision_count = 21;
var component = compile('<revisions repo="repo" resultset="resultset" />', mockData); var component = compile('<revisions repo="repo" resultset="resultset" />', mockData);
var revisionItems = component[0].querySelectorAll('li'); var revisionItems = component.el[0].querySelectorAll('li');
expect(revisionItems.length).toEqual(mockData.resultset.revisions.length + 1); expect(revisionItems.length).toEqual(mockData.resultset.revisions.length + 1);
var lastItem = revisionItems[revisionItems.length - 1]; var lastItem = revisionItems[revisionItems.length - 1];
@ -125,7 +115,7 @@ describe('Revision list react component', () => {
var linkifiedCommentText = $filter('linkifyBugs')(escapedComment); var linkifiedCommentText = $filter('linkifyBugs')(escapedComment);
var component = compile('<revisions repo="repo" resultset="resultset" />', mockData); var component = compile('<revisions repo="repo" resultset="resultset" />', mockData);
var commentEm = component[0].querySelector('.revision-comment em'); var commentEm = component.el[0].querySelector('.revision-comment em');
expect(commentEm.innerHTML).toEqual(linkifiedCommentText); expect(commentEm.innerHTML).toEqual(linkifiedCommentText);
}); });
@ -135,12 +125,12 @@ describe('Revision list react component', () => {
mockData.resultset.revisions[0].comments = "Backed out changeset a6e2d96c1274 (bug 1322565) for eslint failure"; mockData.resultset.revisions[0].comments = "Backed out changeset a6e2d96c1274 (bug 1322565) for eslint failure";
component = compile('<revisions repo="repo" resultset="resultset" />', mockData); component = compile('<revisions repo="repo" resultset="resultset" />', mockData);
firstRevision = component[0].querySelector('li .revision'); firstRevision = component.el[0].querySelector('li .revision');
expect(firstRevision.getAttribute('data-tags').indexOf('backout')).not.toEqual(-1); expect(firstRevision.getAttribute('data-tags').indexOf('backout')).not.toEqual(-1);
mockData.resultset.revisions[0].comments = "Back out changeset a6e2d96c1274 (bug 1322565) for eslint failure"; mockData.resultset.revisions[0].comments = "Back out changeset a6e2d96c1274 (bug 1322565) for eslint failure";
component = compile('<revisions repo="repo" resultset="resultset" />', mockData); component = compile('<revisions repo="repo" resultset="resultset" />', mockData);
firstRevision = component[0].querySelector('li .revision'); firstRevision = component.el[0].querySelector('li .revision');
expect(firstRevision.getAttribute('data-tags').indexOf('backout')).not.toEqual(-1); expect(firstRevision.getAttribute('data-tags').indexOf('backout')).not.toEqual(-1);
}); });