使用Jasmine测试AngularJS模块会导致Jasmine错误

时间:2013-02-07 11:48:50

标签: angularjs jasmine

我无法在AngularJS模块上进行简单的Jasmine测试。任何建议都将非常感谢。

带控制器的模块:

(function(myApp) {
    myApp.App = angular.module("MyApp", []).
    config(["$routeProvider", function($routeProvider) {
    $routeProvider.
        when('/', { controller: "CoreAppController", templateUrl: 'App.html' }).
        otherwise({ redirectTo: '/' });
    }]);

    myApp.App.controller("CoreAppController", function($scope, $http, widgetService)     {
        /* controller definition */
    }
}(window.myApp = window.myApp || {}));

单元测试:

(function(myApp) {
    describe("CoreAppController spec", function() {
        describe("Create the CoreApp", function() {
            beforeEach(angular.module("MyApp"));
            describe("CoreAppController", function() {
                it("Should create the core application",
                    expect(1).toBeGreaterThan(0)
                )
            });
        })
    });
}(window.myApp = window.myApp || {}));

测试文件中包含的文件按以下顺序排列:

  • jasmine.js
  • 茉莉html.js
  • angular.min.js
  • angular.mock.js
  • app.js(包含模块和控制器定义)
  • CoreAppControllerSpec.js(单元测试文件)。

运行此测试会导致以下错误:

TypeError:对象#没有方法' apply'     在jasmine.Block.execute(file:/// C:/TeamFoundation/PRE/test/jasmine/jasmine.js:1064:17)     在jasmine.Queue.next_(file:/// C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2096:31)     在jasmine.Queue.start(file:/// C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2049:8)     在jasmine.Spec.execute(file:/// C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2376:14)     在jasmine.Queue.next_(file:/// C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2096:31)     在jasmine.Queue.start(file:/// C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2049:8)     在jasmine.Suite.execute(file:/// C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2521:14)     在jasmine.Queue.next_(file:/// C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2096:31)     在jasmine.Queue.start(file:/// C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2049:8)     在jasmine.Suite.execute(file:/// C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2521:14)

删除'模块'测试线导致它通过。我做错了什么?

3 个答案:

答案 0 :(得分:5)

angular.module创建了一个新模块。

module是angular.mock.module的别名 - 在窗口上发布以便于访问 - 它收集模块的配置。

这就是为什么将angular.module更改为模块可以解决您的问题。

此致 埃坦

答案 1 :(得分:0)

奇怪的是,将'angular.module'改为'module'解决了这个问题!

答案 2 :(得分:0)

更好的解决方案是在angular-mocks.js脚本之后加入angular.js,以便角度模拟定义window.module = angular.mock.module = ...(以及window.inject,依此类推。 ..)。