首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Gulp-mocha测试角度:“未定义窗口”

用Gulp-mocha测试角度:“未定义窗口”
EN

Stack Overflow用户
提问于 2014-09-18 05:55:38
回答 1查看 3.3K关注 0票数 4

我正在用Gulp建立一个项目,用Mocha运行单元测试,包括角度测试。我有基本的设置工作(indexOf等),但是当我包含角度模拟时,我得到了这个错误或节点模块错误:

ReferenceError in 'gulp-mocha': "Window is not defined"

我试过包括角度模组-模拟,使用吞咽-摩卡-幻影.但结果是一样的。(对于mocha-幻影,我的错误是“Init timeout”。)我见过许多使用Mocha和角或Gulp和Karma的配置的例子,但是还没有找到关于Gulp、Mocha和角的单独解决方案。

我正在考虑类似于这个Karma解决方案的东西,通过在一个配置文件中指定它并强制Gulp加载它(Angular testing with Karma: "module is not defined")来正确地加载角度模拟。然而,即使这样做可以工作,它似乎吞咽-摩卡不支持加载配置文件(mocha.opts - https://github.com/sindresorhus/gulp-mocha/issues/26)。我很乐意听到更直截了当的解决办法。

我使用角度模拟1.2.22和吞咽-摩卡1.1.0。

代码片段:

代码语言:javascript
复制
var mocha = require('gulp-mocha');

gulp.task('test', function () {
    return gulp.src('test/*.js', {read: false})
        .pipe(mocha({reporter: 'nyan', timeout: 400}));
});

test/test.js

代码语言:javascript
复制
var assert = require('assert');

var angular_mocks = require('angular-mocks'); //Fails only when this line is present

//tests
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-18 17:30:42

最终对我有效的是使用Karma和Mocha的结合。

具体来说,我使用了吞咽业力,并在karma.config.js中定义了配置,并像其他人一样为gulp.src使用了一个虚拟文件:

代码语言:javascript
复制
gulp.task('test', function () {
  return gulp.src('./foobar.js').pipe(karma({      
    configFile:'karma.config.js',
    action: 'run'
  }))
  .on('error', handleErrors);

});

然后我使用了这个karma.config.js文件。我需要npm模块业力-摩卡业力-chai业力-兄弟.(只有前两个,我得到的是“”。当然,我尝试过包括业力要求,但这并不适用于Browserify。然后我尝试了因果报应--俗语,但还是没用。然后,我尝试了业力-浏览化,并得到了一个奇怪的错误,涉及包(),似乎没有人解决(https://github.com/xdissent/karma-browserify/issues/46)。Karma兄弟成功了。)

我还需要对测试中引用的每个文件以及测试本身进行预处理。(对于使用karma-phantomjs-launcher.,phantomJS也包括我使用的是角形模拟的第一个版本,因为它是最近的版本: v1.2.25,而npm的版本是1.2.22,但npm版本可能有效。)

代码语言:javascript
复制
module.exports = function(config) {
config.set({ 

  basePath: '',
  // frameworks to use
  frameworks: ['browserify', 'mocha', 'chai'],

  // list of files / patterns to load in the browser
  files: [
    'node_modules/angular/lib/angular.min.js',
    'bower_components/angular-mocks/angular-mocks.js',
    'source/javascript/controllers/*.js',
    'source/javascript/*.js',
    'test/*.js'
  ],

  reporters: ['progress'],

  port: 9876,

  colors: true,

  autoWatch: true,

  browsers: ['PhantomJS'],

  preprocessors: {
    'source/javascript/controllers/*.js': ['browserify'],
    'source/javascript/*.js': ['browserify'],
    'test/*.js': ['browserify']
  }

  });
};

最后这个测试通过了。最后,我需要确保我的模块和控制器的名称是一致的(大写等等)。解决“模块未定义”错误。为了调试,我将文件中的node_modules/angular/lib/angular.min.js替换为node_modules/angular/lib/angular.js

代码语言:javascript
复制
describe('Angular', function() {

  describe('App Controllers', function() {

    beforeEach(angular.mock.module('App'));

    describe('MessageCtrl', function() {

      it('should retrieve the correct amount of messsages', angular.mock.inject(function($controller) {
        var scope = {},
        ctrl = $controller('MessageCtrl', {$scope:scope});
        assert.equal(scope.messages.length, 2);
      }));
    });
  });
});

我确实明白这句话:“警告:尝试加载角度超过一次。”我能忍受它。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25905139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档