Jasmine断言呼叫顺序

时间:2015-10-25 00:17:47

标签: 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方法?

1 个答案:

答案 0 :(得分:3)

我找到的一个解决方案是推送阵列而不是使用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'])