GC_*_*GC_ 4 unit-testing mocking jasmine angularjs spyon
我如何模拟超时调用?
$scope.submitRequest = function () {
var formData = getData();
$scope.form = JSON.parse(formData);
$timeout(function () {
$('#submitForm').click();
}, 2000);
};
Run Code Online (Sandbox Code Playgroud)
我希望看到使用正确的函数调用超时.
我想要一个模拟$ timeout的spyon函数的例子.
spyOn(someObject,'$timeout')
Run Code Online (Sandbox Code Playgroud)
首先,DOM操作应该只在指令中执行.此外,最好使用angular.element(...),而不是$(...).最后,为此,您可以将元素的单击处理程序暴露给作用域,监视它,并检查是否已调用该处理程序:
$timeout.flush(2000);
$timeout.verifyNoPendingTasks();
expect(scope.myClickHandler).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)
编辑:
由于这是一个表单,并且没有ng-click处理程序,您可以使用ng-submit处理程序,或者为表单添加名称并执行:
$timeout.flush(2000);
$timeout.verifyNoPendingTasks();
expect(scope.formName.$submitted).toBeTruthy();
Run Code Online (Sandbox Code Playgroud)