【发布时间】:2016-01-20 12:27:31
【问题描述】:
我正在尝试在 Jasmine 中执行以下操作,但不确定是否可行:
我得到了一个具有 2 种方法的服务对象,A 和 B。 方法 A 调用方法 B(B 实际上是一个 $http 调用,我不想在测试期间这样做:我想模拟它)。
在我的 BeforeEach 部分中,我这样做:
spyOn(Serviceinstance, 'B').and.callFake(function(){
return true;
});
在我的测试中:
var result = Serviceinstance.A();
expect(result).toBeTrue();
当然,B的真实代码返回false。 我的问题是我的测试总是失败。 spy 中提供的函数永远不会被方法 A 调用。 另一方面,如果我这样称呼 B:
var result = Serviceinstance.B();
然后调用spy的函数,我的测试通过了。
所以我应该像这样修改我的实例:
Serviceinstance.B = function(){return true;}
因为 Jasmine 不能模拟调用堆栈的“第二”级? (对我来说似乎完全不可能)
我确实错过了什么......
【问题讨论】:
-
我知道这个问题可能看起来很愚蠢,但这确实是我的行为。我已经阅读了 jasmine 文档,但不明白发生了什么,所以欢迎任何指针(C# 背景,所以 Mocking 通常没什么大不了的 :))
标签: javascript unit-testing jasmine