我有一个 Angularjs 应用程序,它在执行某些操作之前使用简单的 JavaScript 确认。
Controller :
function TokenController($scope) {
$scope.token = 'sampleToken';
$scope.newToken = function() {
if (confirm("Are you sure you want to change the token?") == true) {
$scope.token = 'modifiedToken';
}
};
}
查看:
<div id="tokenDiv">
Token:{{token}} <button ng-click="newToken()">New Token</button>
</div>
现在我想要进行端到端测试来检查 View 中的 token 是否被正确替换。如何拦截 javascript.confirm()
调用,使其不会停止测试的执行?
测试:
it('should be able to generate new token', function () {
var oldValues = element('#tokenDiv').text();
element('button[ng-click="newToken()"]').click(); // Here the javascript confirm box pops up.
expect(element('#tokenDiv').text()).not.toBe(oldValues);
});
到目前为止,我已经尝试重新定义 window.confirm
函数,但实际调用却提示它未定义。
我还想在 window.confirm
上设置 Jasmine spy ,但在以下语法 spyOn(window, 'confirm');
中,它给了我一个错误:您无法监视 null
。
我将如何进行这样的测试?
最佳答案
另一种选择是直接创建 spy 并自动返回true
:
//Jasmine 2.0
spyOn(window, 'confirm').and.callFake(function () {
return true;
});
//Jasmine 1.3
spyOn(window, 'confirm').andCallFake(function () {
return true;
});
关于angularjs - Javascript.confirm() 和 Angularjs Karma e2e 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16424961/