gpt4 book ai didi

tdd - Jasmine 测试 CoffeeScript Expect(setTimeout).toHaveBeenCalledWith

转载 作者:行者123 更新时间:2023-12-02 02:59:44 30 4
gpt4 key购买 nike

在学习Jasmine的过程中,我遇到了这个问题。我想要运行一个基本函数,然后设置一个超时以再次调用自身......简单的东西。

class @LoopObj
constructor: ->
loop: (interval) ->
#do some stuff
setTimeout((=>@loop(interval)), interval)

但我想测试以确保使用正确的参数调用 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)

我收到此错误:预期 spy setTimeout 已使用 [ Function, 10 ] 调用,但已使用 [ [ Function, 10 ] ] 调用

这是因为 (-> my_nifty_loop.loop(interval)) 函数不等于 (=>@loop(interval)) 函数吗?或者它与第二个 [ [ Function, 10 ] ] 周围的额外方括号有关?还有别的事吗?

我哪里出错了?

最佳答案

我不太了解 CoffeeScript,但你可以通过替换来调试

expect(setTimeout).toHaveBeenCalledWith((-> my_nifty_loop.loop(interval)), interval)

expect(setTimeout).toHaveBeenCalledWith(jasmine.any(Function), interval)

并重新运行规范。我认为如果多余的方括号消失,那么你的问题是因为你有两个不同的函数引用。如果它们没有消失,则说明您的 LoopObj 定义有些奇怪,可能是粗箭头运算符(在我的 n00b 眼睛看来没有必要)。

关于tdd - Jasmine 测试 CoffeeScript Expect(setTimeout).toHaveBeenCalledWith,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13591895/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com