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

2 番目のテストは常に失敗し、メッセージは次のとおりです。

Expected 0 to be 1.

ご親切にありがとうございました。

4

1 に答える 1

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は正しく、コードのバグをうまく発見しました。

たとえば、次のコード

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@count1c1c2

于 2012-09-27T03:44:22.310 に答える