当监视方法时,我们可以调用Through(使用原始实现)或callFake(使用自定义实现)。
我想要的是一个类似于callThrough的行为,但在将其返回给调用者之前检查/修改它的返回值。
所以我可以这样做:
spyOn(foo, "fetch").and.afterCall(function(result) {
expect(result).toBeDefined();
result.bar = "baz";
return result;
});
现在最简单的方法是做这样的事情:
var original = foo.fetch;
foo.fetch = function() {
var result = original.apply(this, arguments);
expect(result).toBeDefined();
result.bar = "baz";
return result;
}
这有点烦人,因为现在我必须手动恢复间谍,而不是让框架自动为我做。
答案 0 :(得分:0)
Jasmine是否有后期间谍?
一般来说:不。
您可以使用这样的功能扩展SpyStrategy
object:
this.callThroughAndModify = function(resultModifier) {
var result;
plan = function() {
result = originalFn.apply(this, arguments);
return resultModifier(result);
};
return getSpy();
};
您要克隆上述SpyStrategy
文件并插入该方法。
用法:
var obj = {
fn: function(a) { return a * 2; }
};
spyOn(obj, "fn").and.callThroughAndModify(function(result) {
console.log("Original result: ", result);
return 1;
});
expect(obj.fn(2)).toBe(1);
缺点: