加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

tdd – Jasmine测试coffeescript期望(setTimeout).toHaveBeenCal

发布时间:2020-12-14 04:50:59 所属栏目:百科 来源:网络整理
导读:在学习Jasmine的过程中,我遇到了这个问题.我想要一个基本的函数来运行,然后设置一个超时来再次调用自己…简单的东西. class @LoopObj constructor: - loop: (interval) - #do some stuff setTimeout((=@loop(interval)),interval) 但我想测试以确保使用正确
在学习Jasmine的过程中,我遇到了这个问题.我想要一个基本的函数来运行,然后设置一个超时来再次调用自己…简单的东西.

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眼睛不需要).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读