我正在测试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方法?
答案 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'])