18

我尝试测试下面的代码:

describe('myService test', function () {
    describe('when I call myService.one', function () {
        beforeEach(angular.module('TargetMarketServices'));
        it('returns 1', inject(function (imagesRepository) {
            expect(true).toEqual(true);
        }));

    });

});

执行此代码时,我收到此错误:

TypeError: 'undefined' is not a function (evaluating 'this.func.apply(this.spec)')
    at http://localhost:8080/testacular.js:76
    at http://localhost:8080/context.html:35
ReferenceError: Can't find variable: inject
    at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:6
    at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:8
    at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:10

PhantomJS 1.8:执行 1 of 3(1 FAILED)(跳过 2)(0.072 秒 / 0.01 秒)

对于我的测试,我将 Testacular 与 Jasmine 和 PhantomJS 一起使用。

4

2 回答 2

28

AngularJS 提供了两个测试库:

  • 角模拟.js
  • 角度场景.js

angular-mocks 用于 Jasmine 和 Karma 测试。它发布全局方法 module() 和 inject() 以在 Jasmine 规范测试中使用。这意味着您必须加载 angular-mocks.js 脚本(在加载 angular.js 库/脚本之后)

angular-scenario 仅用于 e2e 测试。

于 2013-09-04T14:32:52.900 回答
13

你拥有的那条线

beforeEach(angular.module('TargetMarketServices'));

应该

beforeEach(module('TargetMarketServices'));

如果您查看它使用的 test/unit/directivesSpec.js中的angular-phonecat项目

beforeEach(module('myApp.directives'));

如果我修改它以使用 angular.module 代替:

beforeEach(angular.module('myApp.directives'));

然后我在运行 testacular 时也收到此错误:

TypeError: 'undefined' is not a function (evaluating 'this.func.apply(this.spec)')
于 2013-02-07T23:45:29.690 回答