【问题标题】:My very simple Jasmine test fails with message 'Expected 0 to be 1.'我非常简单的 Jasmine 测试失败,并显示消息“预期 0 为 1”。
【发布时间】:2012-09-18 18:52:24
【问题描述】:

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

谢谢你的好意。

【问题讨论】:

    标签: javascript coffeescript jasmine


    【解决方案1】:

    如果您希望 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(按此顺序),即使您完成后@countc1c2 中都是1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多