首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >未定义Angular returns模块中的测试服务

未定义Angular returns模块中的测试服务
EN

Stack Overflow用户
提问于 2012-11-12 03:46:16
回答 7查看 75.9K关注 0票数 128

我试图在我的项目中运行默认的服务单元测试(取自GitHub上的Angular Seed项目),但我一直收到错误“模块未定义”。

我读到它可能与referenced JavaScript files的顺序有关,但我似乎不能让它工作,所以希望你们中的一个人能帮上忙。

我的测试配置如下所示:

basePath = '../';

文件=

‘'public/javascripts/lib/jquery-1.8.2.js',

‘'public/javascripts/lib/angular.js',

‘'public/javascripts/lib/angular-.js',

‘'public/app.js',

‘’public/controller/.js‘,

‘'public/directives.js',

‘'public/filters.js',

‘'public/services.js',

茉莉

JASMINE_ADAPTER,

‘'public/javascripts/lib/angular-mocks.js',

‘'test/unit/*.js’;

autoWatch =真;

浏览器= 'Chrome';

junitReporter ={ outputFile:'test_out/unit.xml',suite:'unit‘};

该服务如下所示:

angular.module('myApp.services', []).
  value('version', '0.1');

测试看起来像这样:

'use strict';

describe('service', function() {
  beforeEach(module('myApp.services'));


  describe('version', function() {
    it('should return current version', inject(function(version) {
      expect(version).toEqual('0.1');
    }));
  });
});

在通过testacular运行测试时出现的错误是:

ReferenceError:模块未定义

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-11-15 23:15:11

您缺少angular-mocks.js文件。

票数 260
EN

Stack Overflow用户

发布于 2013-08-06 16:25:00

我也遇到了同样的问题,并且我理解为什么它不工作:在 jasmine.js -mocks.js文件之前必须引用angular javascript 。实际上,angular-mocks.js会检查是否加载了Jasmine,并且只有在加载时才会将模块函数添加到窗口中。

以下是Angular Mock代码的摘录:

(在下面关于“黑客攻击”的一些评论之后编辑:这只是代码的摘录,这不是你需要自己编写的东西,它已经在那里了!)

window.jasmine && (function(window) {

[...]

  window.module = angular.mock.module = function() {
    var moduleFns = Array.prototype.slice.call(arguments, 0);
    return isSpecRunning() ? workFn() : workFn;
    /////////////////////
    [...]
  };

简而言之:只需在 angular-mocks.js之前引用您的jasmine.js 就可以了。

票数 41
EN

Stack Overflow用户

发布于 2013-01-05 09:27:08

angular-mocks.js中提供了window.module函数,它是angular.mock.module的缩写。正如在the docs中提到的,module函数只适用于Jasmine。

使用Testacular,下面的示例配置文件将加载angular-mocks.js

/** example testacular.conf.js */

basePath = '../';
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'path/to/angular.js',
  'path/to/angular-mocks.js',   // for angular.mock.module and inject.
  'src/js/**/*.js',             // application sources
  'test/unit/**/*.spec.js'      // specs
];
autoWatch = true;
browsers = ['Chrome'];

而且,正如其他地方所建议的那样,您可以运行带有调试日志的Testacular来查看加载了哪些脚本(您也可以在检查器中看到相同的脚本):

testacular --log-level debug start config/testacular.conf.js

angular.mock.inject docs包含了一个非常完整示例。

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

https://stackoverflow.com/questions/13334749

复制
相关文章

相似问题

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