【发布时间】:2025-12-10 16:45:01
【问题描述】:
我有一个主干模型:
class DateTimeSelector extends Backbone.Model
initialize: ->
@bind 'change:date', @updateDatetime
@bind 'change:time', @updateDatetime
updateDatetime: =>
# do some stuff with the sate and time
我使用jasmin 和sinon.js 对该代码进行了一些测试
describe "DateTimeSelector", ->
beforeEach ->
@datetime = new DateTimeSelector()
describe "updateDatetime", ->
beforeEach ->
@updateSpy = sinon.spy(@datetime, 'updateDatetime')
afterEach ->
@datetime.updateDatetime.restore()
# passes
it "should be called when we call it", ->
@datetime.updateDatetime()
expect(@updateSpy).toHaveBeenCalledOnce()
# fails
it "should be called when we trigger it", ->
@datetime.trigger 'change:date'
expect(@updateSpy).toHaveBeenCalled()
# fails
it "should be called when we set the date", ->
@datetime.set { date: new Date() }
expect(@updateSpy).toHaveBeenCalled()
当我在浏览器中使用它时它似乎可以工作,但我似乎无法通过测试。谁能赐教?
【问题讨论】:
-
您可能需要重新标记以包含
coffeescript。我会为你添加它,但你的最大值为 5,我不想决定为你替换哪个。 -
是的,我不知道在这种情况下该怎么做。问题显然是用 Coffee 写的,但问题和解决方案(很可能)与咖啡脚本无关。所以我不知道标记为coffeescript是否正确。
-
好吧,我看了这个问题,因为它被标记为 JS;但我无法提供帮助,因为该示例是我自己不使用的咖啡脚本。所以我认为咖啡脚本标签可能会吸引其他咖啡脚本用户,他们可以更轻松地阅读和理解您的示例。 :)
-
看来你在这里测试了错误的东西。在大多数情况下,监视要测试的课程并不是一个好主意。在您的情况下,您必须测试
@updateDatetime的结果是否是您期望的结果,而不是它是否被调用,因为这是您从骨干网获得的功能,您必须相信他们已经测试了他们的东西。
标签: javascript backbone.js jasmine coffeescript backbone-events