我正在测试取决于用户操作的模态行为,模态结果可以返回多个选项。更改提供服务值以测试不同情况
基于的代码如下:
const modalInstance = this.$uibModal.open({
animation: true,
resolve: {},
component: 'modalView',
size: 'lg'
});
let dismissed = false;
modalInstance.result.then((result) => {
if (result.redirect) {
this.redirectToBrowseIfReverted();
} else {
this.redirectToSaveTarget();
}
},
() => {
dismissed = true;
});
所以根据重定向的是真的还是假的,它会调用redirectToBrowseIfReverted
或redirectToSaveTarget
。要开始测试了这一点,我只是通过angular.mock.module
注入module
并通过$uibModal
服务$provide
嘲笑的期望:
let mockModal =() => ({
open:() => {
return { result: $q.resolve({ redirect: true }) };
}
});
beforeEach(() => {
angular.mock.module(moduleName, $provide => {
$provide.service('$uibModal', mockModal);
});
这肯定将返回redirect
值true
并呼吁redirectToBrowseIfReverted
,但我想测试的情况下,这是false
但我不知道如何在特定的UT案例中告诉角度,以替代$provide
服务$uibModal
并返回false
。任何帮助将非常感激。
谢谢队友!我正在使用'spyOn',但效果不好,我在监视服务而不是控制器的'范围': 'spyOn($ uibModal,'open')。and.returnValue({result:$ q。 resolve({redirect:false})});'而不是'spyOn(controller。$ uibModal,'open').and.returnValue({result:$ q.resolve({redirect:false})});' 毕竟我在构造函数上设置了模态服务,使其在控制器范围内可用: '构造函数($ uibModal,$ rootScope,$ scope,$ timeout,$ q){ this。$ uibModal = $ uibModal; ...' 感谢您的解决方案! – Enot