我试图在我的项目中运行默认的服务单元测试(取自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:模块未定义
发布于 2012-11-15 23:15:11
您缺少angular-mocks.js文件。
发布于 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 就可以了。
发布于 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包含了一个非常完整示例。
https://stackoverflow.com/questions/13334749
复制相似问题