我正在使用它,打开一个新标签:
$window.open($scope.jobInviteData.externalLink);
问题在于我使用Karma进行测试,并且它打开了一个新窗口。 我如何才能使业力不能打开任何窗户?
答案 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();