Jasmine Spy根据参数返回不同的值

时间:2017-06-27 05:34:22

标签: javascript jasmine spy

我正在监视一个JS方法。我想根据方法的实际参数返回不同的东西。我试过callFake并尝试使用参数[0]访问参数,但它说参数[0]未定义。 这是代码 -

 spyOn(testService, 'testParam').and.callFake(function() {
     var rValue = {};
     if(arguments[0].indexOf("foo") !== -1){
         return rValue;
     }
     else{
         return {1};
     }
 })        

这里建议 - Any way to modify Jasmine spies based on arguments?

但它对我不起作用。 :(

1 个答案:

答案 0 :(得分:5)

使用参数应该可以正常工作。另外在侧面注释中,您可以粘贴整个测试对象 - 尽管这不是问题的根源。

以下是我如何使用它。查看行动here

var testObj = {
  'sample': "This is a sample string",
  'methodUnderTest': function(param) {
    console.log(param);
    return param;
  }
};

testObj.methodUnderTest("You'll notice this string on console");

describe('dummy Test Suite', function() {
  it('test param passed in', function() {
    spyOn(testObj, 'methodUnderTest').and.callFake(function() {
      var param = arguments[0];
      if (param === 5) {
        return "five";
      }
      return param;
    });
    var val = testObj.methodUnderTest(5);
    expect(val).toEqual('five');
    var message = "This string is not printed on console";
    val = testObj.methodUnderTest(message);
    expect(val).toEqual(message);
  });
});