当我有 angular (1.6) 作为依赖项时,无法用 mocha 测试某些东西
Can not test something with mocha when I have angular (1.6) as a dependency
我想测试一个具有 angular (1.6) 作为依赖项的 ng-redux reducer。
当我 运行 使用 mocha 进行测试(npm 测试)时,我得到:
/data/work/mocha-angularjs/node_modules/angular/angular.js:33343
})(window);
^
ReferenceError: window is not defined
我尝试添加 jsdom 以提供假 window。但是在导入 angular 期间它仍然失败并出现此错误:
module.exports = angular;
^
ReferenceError: angular is not defined
有没有办法让 angular 在 mocha/babel 世界中正常工作?
我做了一个小的 github 项目可用 here 重现了这个问题。
项目内容如下:
Package.json
{
"name": "mocha-angularjs",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"angular": "^1.6.3"
},
"devDependencies": {
"babel-core": "^6.24.0",
"babel-preset-es2015": "^6.24.0",
"babel-preset-latest": "^6.24.0",
"chai": "^3.5.0",
"jsdom": "9.12.0",
"jsdom-global": "2.1.1",
"mocha": "^3.2.0"
},
"scripts": {
"test": "NODE_ENV=test mocha src/index.test.js --compilers js:babel-register --require jsdom-global/register"
},
"repository": {
"type": "git",
"url": "git+https://github.com/jtassin/mocha-angularjs.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/jtassin/mocha-angularjs/issues"
},
"homepage": "https://github.com/jtassin/mocha-angularjs#readme"
}
.babelrc
{
"plugins": [],
"presets": [
"latest",
]
}
要测试的代码
import angular from 'angular';
export default function getFive() {
return 5;
}
测试
import expect from 'chai';
import getFive from './index';
describe('desc', () => {
it('my test', () => {
expect(getFive()).to.equal(5);
});
});
万一哪天有人需要它:
我用angularcontext解决了这个问题。
package.json
"devDependencies": {
"angularcontext": "0.0.23",
[...]
},
在我的测试文件中
/* eslint-env mocha */
/* eslint-disable import/no-extraneous-dependencies */
import angularcontext from 'angularcontext';
before((done) => {
const context = angularcontext.Context();
context.runFile('./node_modules/angular/angular.js', (result, error) => {
if (error) {
/* eslint-disable no-console */
console.error(error);
done(error);
} else {
global.angular = context.getAngular();
done();
}
});
});
/* eslint-disable import/prefer-default-export */
export const angular = global.angular;
github project 已用它更新。
我想测试一个具有 angular (1.6) 作为依赖项的 ng-redux reducer。 当我 运行 使用 mocha 进行测试(npm 测试)时,我得到:
/data/work/mocha-angularjs/node_modules/angular/angular.js:33343
})(window);
^
ReferenceError: window is not defined
我尝试添加 jsdom 以提供假 window。但是在导入 angular 期间它仍然失败并出现此错误:
module.exports = angular;
^
ReferenceError: angular is not defined
有没有办法让 angular 在 mocha/babel 世界中正常工作?
我做了一个小的 github 项目可用 here 重现了这个问题。
项目内容如下:
Package.json
{
"name": "mocha-angularjs",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"angular": "^1.6.3"
},
"devDependencies": {
"babel-core": "^6.24.0",
"babel-preset-es2015": "^6.24.0",
"babel-preset-latest": "^6.24.0",
"chai": "^3.5.0",
"jsdom": "9.12.0",
"jsdom-global": "2.1.1",
"mocha": "^3.2.0"
},
"scripts": {
"test": "NODE_ENV=test mocha src/index.test.js --compilers js:babel-register --require jsdom-global/register"
},
"repository": {
"type": "git",
"url": "git+https://github.com/jtassin/mocha-angularjs.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/jtassin/mocha-angularjs/issues"
},
"homepage": "https://github.com/jtassin/mocha-angularjs#readme"
}
.babelrc
{
"plugins": [],
"presets": [
"latest",
]
}
要测试的代码
import angular from 'angular';
export default function getFive() {
return 5;
}
测试
import expect from 'chai';
import getFive from './index';
describe('desc', () => {
it('my test', () => {
expect(getFive()).to.equal(5);
});
});
万一哪天有人需要它:
我用angularcontext解决了这个问题。
package.json
"devDependencies": {
"angularcontext": "0.0.23",
[...]
},
在我的测试文件中
/* eslint-env mocha */
/* eslint-disable import/no-extraneous-dependencies */
import angularcontext from 'angularcontext';
before((done) => {
const context = angularcontext.Context();
context.runFile('./node_modules/angular/angular.js', (result, error) => {
if (error) {
/* eslint-disable no-console */
console.error(error);
done(error);
} else {
global.angular = context.getAngular();
done();
}
});
});
/* eslint-disable import/prefer-default-export */
export const angular = global.angular;
github project 已用它更新。