javascript - Karma 测试,PhantomJS 错误:找不到模块 'events'
我正在使用 TypeScript 编写一个 Node.js 项目。编译是通过 tsc 完成的,我没有使用像 Gulp 或 Grunt 这样的任务运行器。我会尽量简明扼要,但如果需要进一步的细节,我会很乐意提供。
我有以下类:
// Foo.ts
import { EventEmitter } from 'events';
export class Foo extends EventEmitter {
//...
}
当我尝试使用 Jasmine 配合 Karma 和 PhantomJS 进行测试时,我收到以下错误:Error: Could not find module 'events' from '(...) /foo.js'。对我来说,似乎 PhantomJS 不知道从哪里获取 events 模块。
我的 karma.conf.js 如下所示:
var createCoverageReport = false;
module.exports = function(config) {
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
frameworks: ['jasmine', 'karma-typescript', 'es6-shim'],
files: [
'src/**/*.ts'
],
exclude: [
],
preprocessors: {
'src/**/*.ts': ['karma-typescript']
},
reporters: ['spec'].concat(createCoverageReport ? ['karma-typescript'] : []),
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['PhantomJS'],
singleRun: false,
concurrency: Infinity
})
}
我如何让 PhantomJS 知道,events 模块来自 Node.js 内部模块?
答案#1
嗯,根据在Stack Overflow上对类似问题的回答,有意这样做是不可能的。
Karma 是一个用于测试前端代码的测试运行器,仅限前端测试。这就是它的设计初衷。因此,你不能在不使用奇怪的变通方法的情况下引用任何 Node 内部库。
如果你想测试后端代码,可以继续使用例如 Mocha 和 Chai,而不是 Karma 和 Jasmine。迁移到这些库并不很痛苦,我完全推荐这样做。
此外,本文对如何将 Mocha 与 TypeScript 一起使用提供了很好的介绍,因此我建议先阅读它。