gpt4 book ai didi

angularjs - Angular Karma 单元测试 : How to inject a mock service in karma configuration instead of in all test specs

转载 作者:行者123 更新时间:2023-12-01 02:11:01 25 4
gpt4 key购买 nike

最近,我为现有的 angular 应用程序添加了一项安全功能。这是我后来得到的:

Chrome 3X.0.2125 (Linux) ERROR
Some of your tests did a full page reload!
Chrome 3X.0.2125 (Linux): Executed 23 of 102 (skipped 2) ERROR

这是我设置安全功能的方式:
angular.module('myapp', [/*..I have omitted..*/])
.run(function(MyLoginSerivce, /*.. I have omitted ..*/)){
if(!MyLoginService.isLoggedIn()){
MyLoginService.redirectForLogin();
}else{
/* other logics */
}
}

我知道我必须将以下代码添加到每个测试规范中。但是将它添加到数十个测试文件中听起来很愚蠢。
  beforeEach(module(function($provide){
$provide.value("MyLoginServce", {
isLoggedIn: function(){
return true;
},
redirectForLogin: function {}
});
}));

有没有办法告诉 Karma 使用模拟服务并只在一个地方添加那段代码?

谢谢

当前解决方案

第 1 步:我将其保存在一个单独的文件中,例如./test/mocked.login.service.js:
   var mockedLoginService = {
isLoggedIn: function(){
return true;
},
redirectForLogin: function {}
});

第 2 步:我通过插入“test/mocked.login.service.js”将文件包含在 karma.conf.js 中

第 3 步:我只是在我的测试中使用它,如下所示:
  beforeEach(module(function($provide){
$provide.value("MyLoginServce", mockedLoginService
}));

最佳答案

您可以将模拟服务作为对象提取到单独的 js 文件中,将该文件包含在 karma.conf 文件列表中,然后将该对象用作规范中的全局对象。

关于angularjs - Angular Karma 单元测试 : How to inject a mock service in karma configuration instead of in all test specs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29344225/

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