使用Karma运行Jasmine测试无法找到从onload调用的Angular方法

时间:2014-07-18 15:28:46

标签: angularjs karma-jasmine

首先,我是Karma的新手,我在应用程序中有以下代码......

$(document).ready(function() {
    angular.element('#eventListController').scope().initEvents();
});

但是当我跑到业力时,我看到......

Uncaught TypeError: Cannot read property 'initEvents' of undefined

我在这里缺少什么?我正在使用健康检查测试...

describe("Sanity test for jasmine", function() {
    it("contains spec with an expectation", function() {
        expect(true).toBe(true);
    });
});

更新

所以我认为我遇到了这个问题,因为现在没有DOM。我如何模拟这个DOM我想这将是真正的问题。

新版本仍然失败......

describe("Sanity test for jasmine", function() {
    beforeEach(module("Events"));
    describe("TailsCtrl", function () {
        var scope,
            controller;

        beforeEach(inject(function ($rootScope, $controller) {
            scope = $rootScope.$new();
            controller = $controller;
        }));

        it("should assign message to hello world", function () {
            expect(true).toBe(true);
        });
    });
});

更新

看起来我需要jasmine-jquery但它无法安装在我的本地窗口GRRRRRR

2 个答案:

答案 0 :(得分:1)

你在测试什么?控制器?指令?您必须为测试提供真正的范围。以下是jasmine中控制器测试的示例:

  describe("controller", function() {
    beforeEach(function() {
      $scope = $rootScope.$new();
      HomeCtrl = $controller('HomeCtrl', { $scope: $scope, $rootScope: $rootScope });
      $rootScope.$digest();
    });

    it("foobar", function() {});
  });

现在你的控制器有一个真实的范围,模拟了你的测试。

答案 1 :(得分:0)

看起来我需要一些插件,这样的东西会起作用

http://a-developer-life.blogspot.com/2011/06/jasmine-part-2-spies-and-mocks.html