javascript - Jasmine 断言调用顺序

标签 javascript jasmine

我正在 Jasmine 中测试 NoSQL 文档的表示。每个文档都有一个 save 方法,它将对对象的更改保存到数据库,还有一个 reload 方法,它将文档从数据库加载到对象中。我想定义一个 sync 方法,它简单地调用 save 然后调用 reload

我对该方法的测试如下所示(subject 是文档实例):

describe 'sync', ->
  it 'saves and then reloads', ->
    spyOn(subject, 'save')
    spyOn(subject, 'reload')
    subject.sync()
    expect(subject.save).toHaveBeenCalled()
    expect(subject.reload).toHaveBeenCalled()

然而,这个测试是不完整的;它传递一个 sync 方法,该方法在保存之前重新加载,这将丢弃对文档所做的更改。

如何断言 save 方法在 reload 方法之前被调用?

最佳答案

我发现的一个解决方案是推送到数组而不是使用 Jasmine spy :

describe 'sync', ->
  it 'saves and then reloads', ->
    callOrder = []
    subject.save = -> callOrder.push 'save'
    subject.reload = -> callOrder.push 'reload'
    subject.sync()
    expect(callOrder).toEqual(['save', 'reload'])

关于javascript - Jasmine 断言调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324768/

相关文章:

javascript - 使用以下布局设置跨浏览器兼容的 div 结构

javascript - 空值应用程序脚本谷歌表单

angular - Jasmine 测试订阅服务级别可从 OnInit Angular 观察到

javascript - 使用 johnpapa vm 风格的 Angular Bootstrap 模态的单元测试解析

javascript - 如何使用 Jasmine.js 监视所需的功能

javascript - Angular2单元测试选择下拉值

javascript - 如何更改文本区域中闪烁的光标/插入符号

javascript - 将数据从指令传递到父范围 Controller

javascript - ExtJS 不识别 IE11

javascript - Jasmine 单元测试中仅模拟今天的日期