我有一个像
一样的指令angular.module('App')
.directive('pong', function ($window) {
我如何在测试中模拟$window
?我想的是这样的,但不知道在哪里通过模拟的$窗口。
// Initialize the controller and a mock scope
beforeEach(inject(function ($injector, $rootScope) {
scope = $rootScope.$new();
scope.testValue = null;
$window = $injector.get('$window');
}));
function compileDirective(tpl) {
if (!tpl) {
tpl = '<button pong="{{testValue}}">Test</button>';
}
inject(function($compile) {
element = $compile(tpl)(scope);
});
scope.$digest();
}
答案 0 :(得分:0)
如https://stackoverflow.com/a/20694691/2956716所述,您需要覆盖服务提供商。
例如,(我还没有测试过这个!)
beforeEach(module(function ($provide) {
$provide.provider('$window', $window);
}));
其中$ window是您之前注入$ window的变量。
答案 1 :(得分:0)
您可以提供类似的模拟值(您必须在注入方法调用之前放置此声明)
beforeEach(function () {
module(function ($provide) {
$provide.value('$window', mockWindow);
});
});
然后你必须在mockWindow对象上创建一些间谍 - 因为你期望从$ window中调用一些方法。