Javascript 不能在我的摩卡测试中使用require,通过gulp使用karma runner

Javascript 不能在我的摩卡测试中使用require,通过gulp使用karma runner,javascript,requirejs,gulp,mocha.js,karma-runner,Javascript,Requirejs,Gulp,Mocha.js,Karma Runner,我的第二个项目又遇到了同样的问题。可悲的是,我不得不在这里发布大部分配置文件,以向您展示足够的信息——所以不要害怕;) 我使用以下方法进行单元测试: 吞咽 业力 摩卡咖啡 gulpfile.js // including plugins var gulp = require('gulp') , uglify = require("gulp-uglify") , concat = require('gulp-concat') , clean = require('gu

我的第二个项目又遇到了同样的问题。可悲的是,我不得不在这里发布大部分配置文件,以向您展示足够的信息——所以不要害怕;)

我使用以下方法进行单元测试:

  • 吞咽
  • 业力
  • 摩卡咖啡

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();
    });
});
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'
        ]
    });
};
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");
        });
    });
});
karma.config.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();
    });
});
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'
        ]
    });
};
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");
        });
    });
});
heritageguardtest.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();
    });
});
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'
        ]
    });
};
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");
        });
    });
});
吞咽“测试”任务的输出

[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没有定义,但没有使用var assert=require('assert')在我的mocha测试文件中,我无法使用断言库==无法进行测试


那么之前有人是如何解决这个问题的呢?我找不到任何解决方案,无论是使用另一种方式使断言库工作(无需),还是在测试文件中使require工作。

Karma不是服务器端测试框架,因此您没有像
fs
assert
这样的NodeJS模块

Karma只需将测试/框架脚本直接注入页面。它不使用任何类型的捆绑/模块模式


您需要包括一个使用Karma的断言库(如果您想要“expect”语法,请查看chai.js),方法是将它添加到Karma.conf.js中的
文件:
条目中,然后它应该对您全局可用,不需要
require
ing任何东西。

我很犹豫在这里提供建议,因为每次我设置一个测试运行程序,都要花费数小时,而且每一步都会被像你这样的难以理解的错误打断。但是,您可能需要一个新的解决方案。我一直使用茉莉花和咖啡。是的,茉莉花很好用——但我想在我的家庭项目中使用摩卡咖啡……但是是的……见上文;)我认为你不能只用因果报应。您需要一个测试框架。否则,它只是一个裸体的发射器。“我不确定你是如何将这些融入到吞咽中的。”安德鲁会吞咽业力的存在。实际上我用摩卡作为测试框架?但问题是mocha中需要使用断言库。