2014-02-05 30 views
24

初学者与茉莉花,第一次尝试与茉莉花间谍。我以为我是模仿格式displayed here(搜索:“andReturn”),但我发现了,我不能工作了一个错误:茉莉花对象“没有办法”,并返回'“

TypeError: Object function() { 
     callTracker.track({ 
      object: this, 
      args: Array.prototype.slice.apply(arguments) 
     }); 
     return spyStrategy.exec.apply(this, arguments); 
     } has no method 'andReturn' 

没有什么线索,我做错了。这里是我的规格:

describe('Die', function() { 
    it('returns a value when you roll it', function() { 
     var die = Object.create(Die); 
     spyOn(Math, 'random').andReturn(1); 
     expect(die.roll()).toEqual(6); 
    }); 
}); 

以及相应的JS:

var Die = 
{ 
    roll: function() { 
     return Math.floor(Math.random() * 5 + 1); 
    } 
} 

感谢您的帮助!

回答

31

茉莉花2.0改变了一些间谍语法。 jasmine 2.0 docs

spyOn(Math, 'random').and.returnValue(1); 
+4

'通过用and.returnValue链接间谍,所有对该函数的调用都将返回一个特定的值.' –

+3

是的!看起来像和返回现在和.returnValue。 –

+5

最好是在答案中提供代码,而不是*只是*链接到文档。 –

2

我做了一个茉莉花测试,我展示了这种模拟。和Return似乎工作。 http://jsfiddle.net/LNWXn/

it("has a value of 1 with and return", function() { 
    spyOn(Math, 'random').andReturn(1); 
    expect(Math.random()).toBe(1); 
}); 

您必须记住,它只是测试范围的嘲弄。 这是你的例子似乎通过一个。 http://jsfiddle.net/LNWXn/2/

希望这有助于!

+0

致谢!我其实认为这个问题可能与我使用dist 2.0的事实有关。我在1.3.1中重新创建了精确的测试,他们工作得很好。 –

11
尝试

spyOn(数学, '随机')and.returnValue(1)。

+1

这是目前的2.0.0茉莉花语法 –

1

使用and.returnValue()insted的andReturn()