我有一个在节点中运行的应用程序,我在Mocha中使用Chai for asserts运行我的测试。我也使用Angular,对于测试,我需要将Angular加载到window对象和其他一些我正在使用 testHelper.js 并使用 jsdom < /强>:
/* global window */
const jsdom = require('jsdom').jsdom;
global.document = jsdom().defaultView;
global.window = global.document;
global.navigator = window.navigator = {};
global.Node = window.Node;
global.window.mocha = {};
global.window.beforeEach = beforeEach;
global.window.afterEach = afterEach;
require('angular/angular');
require('angular-mocks');
global.angular = window.angular;
global.inject = global.angular.mock.inject;
global.ngModule = global.angular.mock.module;
require('../client/src/app');
我的 package.json 中有一个测试脚本:
"test": "mocha --reporter progress tools/testSetup.js \"test/*.js\""
当我运行npm run test
时,工作正常。测试运行并按预期通过/失败。
然后我为开始(所以npm run start
)设置了一个脚本,该脚本运行我的应用程序,运行测试和lints,然后监视文件更改。这在第一遍中运行良好:
"start": "npm-run-all --parallel test:watch open:src lint:watch"
(我的package.json的完整脚本部分在下面,所以你可以看到这些命令)
当我保存文件以触发监视时,我在控制台中收到错误:
TypeError: Cannot read property 'mock' of undefined
at Object.<anonymous> (D:\Git\local-poker-club\tools\testSetup.js:18:31)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at D:\Git\local-poker-club\node_modules\mocha\lib\mocha.js:222:27
at Array.forEach (native)
at Mocha.loadFiles (D:\Git\local-poker-club\node_modules\mocha\lib\mocha.js:219:14)
at Mocha.run (D:\Git\local-poker-club\node_modules\mocha\lib\mocha.js:487:10)
at loadAndRun (D:\Git\local-poker-club\node_modules\mocha\bin\_mocha:416:22)
at rerun (D:\Git\local-poker-club\node_modules\mocha\bin\_mocha:444:5)
at D:\Git\local-poker-club\node_modules\mocha\bin\_mocha:452:7
at StatWatcher.<anonymous> (D:\Git\local-poker-club\node_modules\mocha\lib\utils.js:196:9)
at emitTwo (events.js:106:13)
at StatWatcher.emit (events.js:191:7)
at StatWatcher._handle.onchange (fs.js:1487:10)
好像Angular正好加载到窗口对象上,然后以某种方式被消灭。当我调试它时,在第一次传递时,就在require('angular/angular');
行window.angular
正确undefined
之前,但在该行被删除之后,它被正确定义。这不会在第二次发生,它总是undefined
以下是package.json的完整脚本部分:
"scripts": {
"test": "mocha --reporter progress tools/testSetup.js \"test/*.js\"",
"lint": "node_modules/.bin/esw webpack.config.* client server",
"start": "npm-run-all --parallel test:watch open:src lint:watch",
"open:src": "babel-node server/app.js",
"lint:watch": "npm run lint -- --watch",
"test:watch": "npm run test -- --watch"
}
我做错了什么?