gpt4 book ai didi

AngularJS - 带 $timeout 的单元测试

转载 作者:行者123 更新时间:2023-12-02 22:49:56 26 4
gpt4 key购买 nike

我有一个如下所示的指令:

angular.directive('myDirective', ['$compile','$timeout', function($compile,$timeout){
console.log("myDirective compile");
return {
link: function(scope, element) {
console.log("myDirective before timeout");
$timeout(function(){
console.log("myDirective after timeout");
});
}
};
}]);

当我使用 Karma-Jasmine 进行单元测试时,我得到了 myDirectivecompilemyDirective before timeoutLOG 输出。但超时后 myDirective 没有输出

如何让 $timeout 函数在单元测试中运行?

最佳答案

您可以使用 $timeout 服务上的 flush 方法来刷新您设置的超时。 https://docs.angularjs.org/api/ngMock/service/$timeout

请注意,这在 ngMock 中可用,因此您需要包含 Angular-Mocks。 (我相当确定你有,但以防万一。)

请参阅下面的测试示例。

describe('my directive test', function () {
var element;
var scope;

beforeEach(module('myApp'));
beforeEach(inject(function($compile, $rootScope){
element = '<my-directive></my-directive>';
scope = $rootScope.$new();

element = $compile(element)(scope);
scope.$digest();

spyOn(console, 'log').and.callThrough();
}));

it('should not log the timeout', inject(function ($timeout) {
expect(console.log).not.toHaveBeenCalledWith('myDirective after timeout');
}));

it('should log after timeout', inject(function ($timeout) {
$timeout.flush();

expect(console.log).toHaveBeenCalledWith('myDirective after timeout');
}));
});

关于AngularJS - 带 $timeout 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29488133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com