Jasmine是否有后期建议间谍?

时间:2016-12-23 00:43:21

标签: jasmine aop

当监视方法时,我们可以调用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;
}

这有点烦人,因为现在我必须手动恢复间谍,而不是让框架自动为我做。

1 个答案:

答案 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);

缺点: