Jasmine 断言调用顺序

Suc*_*ipi 6 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()
Run Code Online (Sandbox Code Playgroud)

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

如何断言在 r​​eload 方法之前调用了 save 方法?

Suc*_*ipi 5

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

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'])
Run Code Online (Sandbox Code Playgroud)