2012-11-20 24 views
2

我试图设置我的AngularJS应用程序来测试控制器,路线,模板等等,但我遇到了一些问题,获得提供的一些辅助方法, mocks.js上班(即模块注入)。将模拟加载到AngularJS单元测试中

我使用testacular加载了测试套件与规范前添加下列文件:

files = [ 
    MOCHA, 
    MOCHA_ADAPTER, 
    '../application/lib/angular.min.js', 
    './lib/angular/angular-mocks.js', 
    './lib/angular/angular-scenario.js', 
    '../application/application.js', 
    './lib/chai.js', 
    './lib/chai-should.js', 
    './lib/chai-expect.js', 
    './spec/**/*.js' 
]; 

到目前为止好,但是当我进行的测试,我得到这个问题:

ReferenceError: Can't find variable: module 

不知道这是加载。我错过了什么吗?

回答

4

首先要检查的是所有这些文件都在测试浏览器中加载。在配置中弄错路径并且没有意识到这一点很容易。如果您正在使用autowatch进行测试,则可以使用浏览器导航到http://localhost:9876/context.html,并使用开发人员工具检查元素/资源/网络并查看是否缺少任何内容。

如果一切都很好,并且仍然存在问题,请发布一些测试代码,然后我们来看看。

更新:它看起来(奇怪)从angular-mocks.js(行1635)的来源评论window.module只有茉莉花可用。它看起来像你使用摩卡而不是茉莉花。这很可能是罪魁祸首。

答:

我不能正确地采取信贷这个Matsko,因为你想通了自己......但事实证明,目前AngularJS稳定的下载和角度种子含有ngMock的旧版本那不支持摩卡。用github repo中的最新手动替换模拟文件解决了这个问题。很高兴我可以帮助;-)

+0

看起来一切都很好。在哪里定义了辅助函数?角嘲笑?角装载机?角之情况? – matsko

+0

这些单元测试还是e2e测试?我只是再次查看你的文件列表,我不认为你需要'./ lib/angular/angular-scenario.js'。这可能是造成这个问题的原因... –

+0

你在测试中是否这样称呼它? 'beforeEach(module('myApp.controllers'));' –

1

今天我遇到了这个问题,我想向其他人提供完整的必要步骤来完成这个工作。首先让我们说你有一个名为myApp的模块。在那个模块里面有一个名为myModel的服务。 myModel服务有一个名为getItems()的方法。

  1. 目前,angular-mocks.js(我使用的是AngularJS 1.0.6)不支持Mocha。您需要访问此link并用AngularJS GitHub项目中的主分支替换1.0.6版本。一个简单的方法来做到这一点(如果你有wget)在正确的目录中是​​3210。如果你使用正确配置的Sublime或者vim,它也可以很容易地将它拉下来。
  2. 确保您karma.conf.js文件包括文件阵列
  3. 在某处,tests.js文件(或许在顶层描述)的角mocks.js文件包括beforeEach(module('myApp'));或任何你命名你的主要模块。
  4. 如果您计划使用的服务(或者任何你想在测试中包括)在不止一个地方,你可以调用另一个beforeEach在需要的地方是这样的:刚

beforeEach(inject(function(myModel) {
mymodel = myModel;
}));

否则你可以注入需要的地方。现在,mymodel变量(注意这是您在beforeEach中分配的变量)将在您的下一个块中用于测试。例如,您现在可以编写:

describe('when fetched', function() {
it('should return 3 items', function() {
// console.log(mymodel.getItems());
expect(mymodel.getItems()).to.have.length(3);
});
});