无法通过 gulp 在我的 karma runner 摩卡测试中使用 require
Cannot use require in my mocha tests with karma runner via gulp
我的第二个项目又遇到了同样的问题。遗憾的是,我必须 post 这里的大部分配置文件才能向您展示足够的信息 - 所以不要害怕 ;)
我正在使用以下单元测试:
- gulp
- 业力
- 摩卡
gulpfile.js
// including plugins
var gulp = require('gulp')
, uglify = require("gulp-uglify")
, concat = require('gulp-concat')
, clean = require('gulp-clean')
, open = require('gulp-open')
, babel = require("gulp-babel")
, copy = require("gulp-copy")
, mocha = require('gulp-mocha');
var Server = require('karma').Server;
gulp.task('tests', function(done) {
Server.start({
configFile: __dirname + '/karma.config.js',
singleRun: true
}, function() {
done();
});
});
karma.config.js
module.exports = function(config) {
config.set({
browsers: ['Chrome'],
frameworks: ['mocha'],
files: [
'./target/src/heritage.guard.js',
'./tests/dummies/dummies.babel.js',
'./tests/heritageguardtests.js'
],
plugins:[
'karma-chrome-launcher',
'karma-mocha'
]
});
};
heritageguardtest.js
var assert = require('assert');
var classDummy = new ClassDummy();
var superClassDummy = new SuperClassDummy();
describe('HeritageGuard Tests', function () {
describe('getSuperClassName', function () {
it('should return the name of the super class as String', function () {
var superClassName = HeritageGuard.getSuperClassName(classDummy);
assert.equal(superClassName, "SuperClassDummy");
});
});
});
Gulp"tests"任务的输出
[09:51:39] Using gulpfile c:\...\...\...\...\JavaScriptProjects\HeritageGuard\gulpfile.js
[09:51:39] Starting 'tests'...
06 03 2016 09:51:39.512:WARN [karma]: Port 9876 in use
06 03 2016 09:51:39.514:WARN [karma]: Port 9877 in use
06 03 2016 09:51:39.515:INFO [karma]: Karma v0.13.21 server started at http://localhost:9878/
06 03 2016 09:51:39.519:INFO [launcher]: Starting browser Chrome
06 03 2016 09:51:48.390:INFO [Chrome 49.0.2623 (Windows 10 0.0.0)]: Connected on socket /#aVMDjm22W8-g3Z_8AAAA with id 44639779
Chrome 49.0.2623 (Windows 10 0.0.0) ERROR
Uncaught ReferenceError: require is not defined
at c:/.../.../.../.../JavaScriptProjects/HeritageGuard/tests/heritageguardtests.js:8
[09:51:48] Finished 'tests' after 9.06 s
Process finished with exit code 0
如您所见,require is not defined 但没有使用 var assert = require('assert'); 在我的mocha 测试文件我不能使用断言库==没办法测试。
那么之前有人是怎么解决这个问题的呢?我找不到任何解决方案来使用另一种方法让断言库工作(不需要),也没有让 require 在测试文件中工作。
Karma 不是服务器端测试框架,因此您没有像 fs
或 assert
.
这样的 NodeJS 模块
Karma 会将 test/frameworks 脚本直接注入页面。它不使用任何类型的 bundling/module 模式。
您需要包含一个使用 Karma 的断言库(如果您想要 "expect" 语法,请查看 chai.js),方法是将其添加到 [=] 中的 files:
条目24=],然后您应该可以在全球范围内使用它,而无需 require
ing 任何东西。
我的第二个项目又遇到了同样的问题。遗憾的是,我必须 post 这里的大部分配置文件才能向您展示足够的信息 - 所以不要害怕 ;)
我正在使用以下单元测试:
- gulp
- 业力
- 摩卡
gulpfile.js
// including plugins
var gulp = require('gulp')
, uglify = require("gulp-uglify")
, concat = require('gulp-concat')
, clean = require('gulp-clean')
, open = require('gulp-open')
, babel = require("gulp-babel")
, copy = require("gulp-copy")
, mocha = require('gulp-mocha');
var Server = require('karma').Server;
gulp.task('tests', function(done) {
Server.start({
configFile: __dirname + '/karma.config.js',
singleRun: true
}, function() {
done();
});
});
karma.config.js
module.exports = function(config) {
config.set({
browsers: ['Chrome'],
frameworks: ['mocha'],
files: [
'./target/src/heritage.guard.js',
'./tests/dummies/dummies.babel.js',
'./tests/heritageguardtests.js'
],
plugins:[
'karma-chrome-launcher',
'karma-mocha'
]
});
};
heritageguardtest.js
var assert = require('assert');
var classDummy = new ClassDummy();
var superClassDummy = new SuperClassDummy();
describe('HeritageGuard Tests', function () {
describe('getSuperClassName', function () {
it('should return the name of the super class as String', function () {
var superClassName = HeritageGuard.getSuperClassName(classDummy);
assert.equal(superClassName, "SuperClassDummy");
});
});
});
Gulp"tests"任务的输出
[09:51:39] Using gulpfile c:\...\...\...\...\JavaScriptProjects\HeritageGuard\gulpfile.js
[09:51:39] Starting 'tests'...
06 03 2016 09:51:39.512:WARN [karma]: Port 9876 in use
06 03 2016 09:51:39.514:WARN [karma]: Port 9877 in use
06 03 2016 09:51:39.515:INFO [karma]: Karma v0.13.21 server started at http://localhost:9878/
06 03 2016 09:51:39.519:INFO [launcher]: Starting browser Chrome
06 03 2016 09:51:48.390:INFO [Chrome 49.0.2623 (Windows 10 0.0.0)]: Connected on socket /#aVMDjm22W8-g3Z_8AAAA with id 44639779
Chrome 49.0.2623 (Windows 10 0.0.0) ERROR
Uncaught ReferenceError: require is not defined
at c:/.../.../.../.../JavaScriptProjects/HeritageGuard/tests/heritageguardtests.js:8
[09:51:48] Finished 'tests' after 9.06 s
Process finished with exit code 0
如您所见,require is not defined 但没有使用 var assert = require('assert'); 在我的mocha 测试文件我不能使用断言库==没办法测试。
那么之前有人是怎么解决这个问题的呢?我找不到任何解决方案来使用另一种方法让断言库工作(不需要),也没有让 require 在测试文件中工作。
Karma 不是服务器端测试框架,因此您没有像 fs
或 assert
.
Karma 会将 test/frameworks 脚本直接注入页面。它不使用任何类型的 bundling/module 模式。
您需要包含一个使用 Karma 的断言库(如果您想要 "expect" 语法,请查看 chai.js),方法是将其添加到 [=] 中的 files:
条目24=],然后您应该可以在全球范围内使用它,而无需 require
ing 任何东西。