我非常简单的Jasmine测试失败,消息'预期0为1'。

时间:2012-09-27 03:36:46

标签: javascript coffeescript jasmine

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

谢谢你的善意。

1 个答案:

答案 0 :(得分:3)

如果您希望incrementdecrement方法返回更新后的值,则需要使用预增量和预减量表单:

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())

会在控制台中为您01提供@count,即使在1和{{1} c1 c2内也是如此{{1}}当你完成时。