我是CoffeeScript和Jasmine的初学者。我试着测试一个简单的类,如下所示:
class Counter
count: 0
constructor: ->
@count = 0
increment: ->
@count++
decrement: ->
@count--
reset: ->
@count = 0
root = exports ? this
root.Counter = Counter
然后,我编写了如下测试代码:
describe("Counter", ->
counter = new Counter
it("shold have 0 as a count variable at first", ->
expect(counter.count).toBe(0)
)
describe('increment()', ->
it("should count up from 0 to 1", ->
expect(counter.increment()).toBe(1)
)
)
)
第二次测试总是失败,消息如下:
Expected 0 to be 1.
谢谢你的善意。
答案 0 :(得分:3)
如果您希望increment
和decrement
方法返回更新后的值,则需要使用预增量和预减量表单:
increment: -> ++@count
decrement: -> --@count
x++
产生x
的值,然后递增x
,这样:
return x++
相当于:
y = x
x = x + 1
return y
而这:
return ++x
是这样的:
x = x + 1
return x
所以Jasmine是对的,并且很好地发现了代码中的错误。
例如,this code:
class Counter
constructor: (@count = 0) ->
incr_post: -> @count++
incr_pre: -> ++@count
c1 = new Counter
c2 = new Counter
console.log(c1.incr_post())
console.log(c2.incr_pre())
会在控制台中为您0
和1
提供@count
,即使在1
和{{1} c1
c2
内也是如此{{1}}当你完成时。