0

Jasmine テストを作成していますが、奇妙な動作を示しています。

これは私のコードです:

root = exports ? this
class root.SomeClass
  constructor: ->
    @index = 0
  incrementIndex: -> @index++
  decrementIndex: -> @index--

そして、これは私のテストコードです:

describe "Object", ->
  object = new SomeClass

  describe ".index", ->
    describe "when index = 3", ->
      object.index = 3

      describe "when next button is clicked", ->
        object.incrementIndex()
        it "returns 4", ->
          expect(object.index).toBe 4

      describe "when previous button is clicked", ->
        object.decrementIndex()
        it "returns 3", ->
          expect(object.index).toBe 2

テスト結果は以下です。

Failing 2 specs

Photos initialized .index when index = 3 when next button is clicked returns 4.
Expected 3 to be 4.

Photos initialized .index when index = 3 when previous button is clicked returns 3.
Expected 3 to be 2.

そして、テスト コードの最後の 4 行をコメント アウトすると、テストがパスするのは奇妙です。何が起こっているのか理解できませんでした...>_<

ご協力ありがとうございました。

4

1 に答える 1

3

テストは相互に作用します。 ブロックでセットアップを行いbeforeEachます。

「オブジェクト」を説明する、->
  オブジェクト=未定義

  beforeEach->
    オブジェクト=新しいSomeClass

  「.index」を記述します、->
    「インデックス=3の場合」と記述します->
      beforeEach->
        object.index = 3

      「次のボタンがクリックされたとき」を説明します、->
        beforeEach->
          object.incrementIndex()

        「4を返す」、->
          expect(object.index).toBe 4

      「前のボタンがクリックされたとき」を説明します、->
        beforeEach->
          object.decrementIndex()

        「3を返す」、->
          expect(object.index).toBe 2

このコードが有効かどうかはチェックされていませんが、テストを修正する方法を示しています。object = undefined2行目に注意してください。ここで変数を宣言する必要があります。そうしないと、それぞれとブロックobjectに対してローカルになります。beforeEachit

于 2012-12-17T10:02:58.260 に答える