gpt4 book ai didi

angularjs - Jasmine SpyOn 多次使用相同的方法

转载 作者:行者123 更新时间:2023-12-02 23:41:36 26 4
gpt4 key购买 nike

我有一个 Angular Controller ,其方法调用 $location.search() 两次。

第一次只是$location.search()返回值。
第二次是 $location.search("foo", null) 清除它。

我的单元测试中有以下 spy :
spyOn($location, "search").and.returnValue({ foo: "bar"});

即使我的实现执行 $location.search("foo", null), spy 也会返回 {foo:"bar"}

我需要一种方法,根据参数让两个不同的 spy 使用同一方法。

我需要这个期望:
expect($location.search().foo).toEqual(null);
在单元测试结束时通过。

最佳答案

你可以用不同的方式来解决这个问题。如果您有时间在测试用例期间更改 spy 实现,您可以执行以下操作:

var searchSpy = spyOn($location,'search');

searchSpy.and.returnValue(null);
// do stuff
searchSpy.and.returnValue({ foo: "bar" });
// do other stuff

如果调用是由代码中的方法触发的,并且您无法更改其间的 spy 实现,那么您可以创建一个接受参数并适当响应的函数:

spyOn($location,'search').and.callFake(function(someParam){
if (someParam) {
return { foo: "bar" };
} else {
return { foo: null };
}
});

当然,您可以对 callFake 实现中的逻辑感到疯狂,但要注意,我认为在这种情况下,它可能是代码味道。不管怎样,祝你编码愉快!

关于angularjs - Jasmine SpyOn 多次使用相同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36200532/

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