1

我是 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.

谢谢你的好意。

4

1 回答 1

3

increment如果您希望您的anddecrement方法返回更新后的值,则需要使用预递增和预递减形式:

increment: -> ++@count
decrement: -> --@count

x++产生 的值,x然后递增x,这样:

return x++

相当于:

y = x
x = x + 1
return y

而这个:

return ++x

是这样的:

x = x + 1
return x

所以 Jasmine 是对的,并且很好地发现了您代码中的错误。

例如,这段代码

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两者都在其中。c1c2

于 2012-09-27T03:44:22.310 回答