2019-05-21 09:01:29 -04:00

237 lines
7.7 KiB
TypeScript

import { Tree } from '@angular-devkit/schematics';
import { runSchematic, callRule } from '../../utils/testing';
import { createEmptyWorkspace } from '@nrwl/workspace/testing';
import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace';
describe('ng-add', () => {
let appTree: Tree;
beforeEach(() => {
appTree = createEmptyWorkspace(Tree.empty());
});
it('should add angular dependencies', async () => {
const tree = await runSchematic('ng-add', {}, appTree);
const { dependencies, devDependencies } = readJsonInTree(
tree,
'package.json'
);
expect(dependencies['@angular/animations']).toBeDefined();
expect(dependencies['@angular/common']).toBeDefined();
expect(dependencies['@angular/compiler']).toBeDefined();
expect(dependencies['@angular/core']).toBeDefined();
expect(dependencies['@angular/platform-browser']).toBeDefined();
expect(dependencies['@angular/platform-browser-dynamic']).toBeDefined();
expect(dependencies['@angular/router']).toBeDefined();
expect(dependencies['core-js']).toBeDefined();
expect(dependencies['rxjs']).toBeDefined();
expect(dependencies['zone.js']).toBeDefined();
expect(devDependencies['@angular/compiler-cli']).toBeDefined();
expect(devDependencies['@angular/language-service']).toBeDefined();
expect(devDependencies['@angular-devkit/build-angular']).toBeDefined();
expect(devDependencies['codelyzer']).toBeDefined();
});
describe('--unit-test-runner', () => {
describe('karma', () => {
it('should add karma dependencies', async () => {
const tree = await runSchematic(
'ng-add',
{
unitTestRunner: 'karma'
},
appTree
);
const { devDependencies } = readJsonInTree(tree, 'package.json');
expect(devDependencies['karma']).toBeDefined();
expect(devDependencies['karma-chrome-launcher']).toBeDefined();
expect(
devDependencies['karma-coverage-istanbul-reporter']
).toBeDefined();
expect(devDependencies['karma-jasmine']).toBeDefined();
expect(devDependencies['karma-jasmine-html-reporter']).toBeDefined();
expect(devDependencies['jasmine-core']).toBeDefined();
expect(devDependencies['jasmine-spec-reporter']).toBeDefined();
expect(devDependencies['@types/jasmine']).toBeDefined();
});
it('should add karma configuration', async () => {
const tree = await runSchematic(
'ng-add',
{
unitTestRunner: 'karma'
},
appTree
);
expect(tree.exists('karma.conf.js')).toBeTruthy();
});
it('should set defaults', async () => {
const tree = await runSchematic(
'ng-add',
{
unitTestRunner: 'karma'
},
appTree
);
const { schematics } = readJsonInTree(tree, 'angular.json');
expect(schematics['@nrwl/angular:application'].unitTestRunner).toEqual(
'karma'
);
expect(schematics['@nrwl/angular:library'].unitTestRunner).toEqual(
'karma'
);
});
});
describe('jest', () => {
it('should add jest dependencies', async () => {
const tree = await runSchematic(
'ng-add',
{
unitTestRunner: 'jest'
},
appTree
);
const { devDependencies } = readJsonInTree(tree, 'package.json');
expect(devDependencies['@nrwl/jest']).toBeDefined();
expect(devDependencies['jest']).toBeDefined();
expect(devDependencies['jest-preset-angular']).toBeDefined();
});
it('should add jest configuration', async () => {
const tree = await runSchematic(
'ng-add',
{
unitTestRunner: 'jest'
},
appTree
);
expect(tree.exists('jest.config.js')).toBeTruthy();
});
it('should set defaults', async () => {
const tree = await runSchematic(
'ng-add',
{
unitTestRunner: 'jest'
},
appTree
);
const { schematics } = readJsonInTree(tree, 'angular.json');
expect(schematics['@nrwl/angular:application'].unitTestRunner).toEqual(
'jest'
);
expect(schematics['@nrwl/angular:library'].unitTestRunner).toEqual(
'jest'
);
});
});
});
describe('--e2e-test-runner', () => {
describe('cypress', () => {
it('should add cypress dependencies', async () => {
const tree = await runSchematic(
'ng-add',
{
unitTestRunner: 'none',
e2eTestRunner: 'cypress'
},
appTree
);
const { devDependencies } = readJsonInTree(tree, 'package.json');
expect(devDependencies['@nrwl/cypress']).toBeDefined();
expect(devDependencies['cypress']).toBeDefined();
expect(devDependencies['@types/jquery']).toBeDefined();
});
it('should set defaults', async () => {
const tree = await runSchematic(
'ng-add',
{
e2eTestRunner: 'cypress'
},
appTree
);
const { schematics } = readJsonInTree(tree, 'angular.json');
expect(schematics['@nrwl/angular:application'].e2eTestRunner).toEqual(
'cypress'
);
});
});
describe('protractor', () => {
it('should add protractor dependencies', async () => {
const tree = await runSchematic(
'ng-add',
{
e2eTestRunner: 'protractor'
},
appTree
);
const { devDependencies } = readJsonInTree(tree, 'package.json');
expect(devDependencies['protractor']).toBeDefined();
expect(devDependencies['jasmine-core']).toBeDefined();
expect(devDependencies['jasmine-spec-reporter']).toBeDefined();
expect(devDependencies['@types/jasmine']).toBeDefined();
expect(devDependencies['@types/jasminewd2']).toBeDefined();
});
it('should set defaults', async () => {
const tree = await runSchematic(
'ng-add',
{
e2eTestRunner: 'protractor'
},
appTree
);
const { schematics } = readJsonInTree(tree, 'angular.json');
expect(schematics['@nrwl/angular:application'].e2eTestRunner).toEqual(
'protractor'
);
});
});
});
describe('defaultCollection', () => {
it('should be set if none was set before', async () => {
const result = await runSchematic('ng-add', {}, appTree);
const angularJson = readJsonInTree(result, 'angular.json');
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/react');
});
it('should be set if @nrwl/workspace was set before', async () => {
appTree = await callRule(
updateJsonInTree('angular.json', json => {
json.cli = {
defaultCollection: '@nrwl/workspace'
};
return json;
}),
appTree
);
const result = await runSchematic('ng-add', {}, appTree);
const angularJson = readJsonInTree(result, 'angular.json');
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/react');
});
it('should not be set if something else was set before', async () => {
appTree = await callRule(
updateJsonInTree('angular.json', json => {
json.cli = {
defaultCollection: '@nrwl/angular'
};
return json;
}),
appTree
);
const result = await runSchematic('ng-add', {}, appTree);
const angularJson = readJsonInTree(result, 'angular.json');
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
});
});
});