卡玛开窗口

时间:2014-03-27 18:44:07

标签: angularjs jasmine karma-runner

我正在使用它,打开一个新标签:

$window.open($scope.jobInviteData.externalLink);

问题在于我使用Karma进行测试,并且它打开了一个新窗口。 我如何才能使业力不能打开任何窗户?

2 个答案:

答案 0 :(得分:4)

你想要模拟$ window服务:

var windowmock;
beforeEach(module("myModule",function ($provide) {
    $provide.service('$window', function () {
        windowmock = jasmine.createSpyObj('$window', ['open']);
        return windowmock;
    });
});

然后你也可以在你的测试中对模拟进行检查,以确保它被调用或不被调用。

expect(windowmock.open).toHaveBeenCalled(); // was called
expect(windowmock.open).not.toHaveBeenCalled(); // was not called
expect(windowmock.open).toHaveBeenCalledWith(somevalue); // was called with some value

答案 1 :(得分:1)

或者,你可以spyOn window.open;并希望它能够解决问题。无需创建windowMock对象。

假设您在beforeEach中正确加载了$ scope。

套件的开始:

var window;

beforeEach(function() {
   inject(function($injector) {
      window = $injector.get('$window');
}});

在您的规范中:

spyOn($window, 'open');
expect($window.open).toHaveBeenCalled();