如何在Angular JS投影上对window.location进行单元测试分配?

时间:2016-08-11 14:35:07

标签: javascript angularjs unit-testing mocking karma-jasmine

我正在使用Keycloak进行单点登录(SSO)的自定义反向代理后面的AngularJS / Javascript单页面应用程序(SAP)。

当用户点击" logout"时,在执行其他操作后,应用程序将执行

window.location = reverseProxyHost + '/logout';

确保用户完全注销,而不仅仅是来自此应用程序,而是来自Keycloak SSO授权的所有应用程序。

如果我们允许此行执行,Karma会抱怨

  

您的部分测试会重新加载整页!

此错误导致整个测试套件失败。

我似乎无法从测试的上下文中覆盖window.location对象值。

如果我创建了一个localContext对象,然后尝试

with(localContext){

测试将失败,因为with'use strict'不兼容。

我有什么想法可以确保线路正在按预期结果执行?

1 个答案:

答案 0 :(得分:2)

尝试使用角度$window$window.location.replace代替window.location = "newlocation.com"。 然后,你可以这样嘲笑:

  var $window = { location: { replace: jasmine.createSpy('replace') } };
  module('app', function ($provide) {
     $provide.value('$window', $window);
  });