在学习Jasmine的过程中,我遇到了这个问题.我想要一个基本的函数来运行,然后设置一个超时来再次调用自己…简单的东西. class @LoopObj constructor: - loop: (interval) - #do some stuff setTimeout((=@loo
class @LoopObj constructor: -> loop: (interval) -> #do some stuff setTimeout((=>@loop(interval)), interval)
但我想测试以确保使用正确的args调用setTimeout
describe "loop", -> xit "does nifty things", -> it "loops at a given interval", -> my_nifty_loop = new LoopObj interval = 10 spyOn(window, "setTimeout") my_nifty_loop.loop(interval) expect(setTimeout).toHaveBeenCalledWith((-> my_nifty_loop.loop(interval)), interval)
我得到这个错误:使用[Function,10]调用了预期的间谍setTimeout但是用[[Function,10]]调用了
这是因为( – > my_nifty_loop.loop(interval))函数不等于(=> @loop(interval))函数吗?或者它与第二个[[功能,10]]周围的额外方括号有关?还有什么altogther?
我哪里出错了?
我不太了解CoffeeScript,但您可以通过替换进行调试expect(setTimeout).toHaveBeenCalledWith((-> my_nifty_loop.loop(interval)), interval)
同
expect(setTimeout).toHaveBeenCalledWith(jasmine.any(Function), interval)
并重新运行规范.我想如果额外的方括号消失了,那么你的问题是因为你有两个不同的函数引用.如果它们没有消失,你的LoopObj定义会有一些奇怪的东西,可能是胖箭头操作符(看起来我的n00b眼睛不需要).