我正在使用以下Coffeescript代码来验证一个backbone.js视图的初始化构建另一个:
describe 'Avia.AviaView', ->
beforeEach ->
@aviaView = new Avia.AviaView(addFixtureDiv('avia'))
@matricesView = new Backbone.View()
spyOn(Avia, 'MatricesView').andCallFake(
(element) =>
if !element
throw "Expected MatricesView to be constructed with a parent element"
else if element.attr('id') != 'tabs-3'
throw "Expected MatricesView to be constructed with the parent element #tabs-3"
else
@matricesView
)
describe 'initialize', ->
beforeEach ->
@aviaView.initialize()
it 'creates a new MatricesView ', ->
expect(Avia.MatricesView).toHaveBeenCalledOnce()
这很好用,但我不禁想到它应该有可能改进它。我想象的语法如下:
it 'creates a new MatricesView ', ->
expect(Avia.MatricesView).toHaveBeenCalledMatching((args...) => args[0].attr('id') == 'tabs-3')
...其中toHaveBeenCalledMatching
采用一个接受参数splat的函数,并返回truthy表示成功,否则返回falsy。
有没有人遇到这样的事情,还是我需要在这里自己动手?或者,有没有人更好地建议如何改进此代码?
答案 0 :(得分:1)
toHaveBeenCalledWith()不适合你吗?在大多数情况下,您要么提前知道值,要么可以计算它们。
如果您确实需要使用函数来评估调用的args,则可以使用单独的期望值argsForCall来单独测试每个arg。
如果最坏的情况发生,你可以随时编写自己的匹配器。但这比前两个听起来要困难得多:)