angularjs - Javascript.confirm() 和 Angularjs Karma e2e 测试

标签 angularjs jasmine karma-runner angularjs-e2e

我有一个 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/

相关文章:

javascript - 在AngularJS中,当制作指令时,有没有办法使用链接函数来操作模板的DOM?

AngularJS - 基于表达式隐藏/显示指令输出

node.js - 从 gulp 发出运行 karma 任务

javascript - angularjs和ionicframework如何实时增加喜欢

javascript - Jasmine Create Spy on Native JS Function on Global Window 对象

javascript - 使用 Angular 服务 + Jasmine 进行 uni 测试 404 故障响应

javascript - 为什么这个 Jasmine spy 会导致错误?

windows - npm 安装产生 ENOENT 错误

javascript - Karma 覆盖同一位置的文件和测试

javascript - 从 Angular 应用程序调用nodejs中的函数