Help us understand the problem. What is going on with this article?

JasmineでbeforeEachを丁寧に使った方が良い理由

More than 5 years have passed since last update.

次のような簡単なクラスがあるとする。indexというプロパティを持ち、そのプロパティを増やすincrementIndex()とプロパティを減らすdecrementIndex()というメソッドを持つ。なお、クラスはテストから見えるようにexportしている。

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

beforeEachを意識しないでテストを書くと以下のようになるだろう。ここではまずindexプロパティに3を代入し、それを1増やしたら4になるべきだというテストを書いている。次に逆に1減らすと2になるべきだというテストを書いている。

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行を削除すると、テストは成功する

中で何が起きているのかよくわからないが、上のテストのdescribe同士はお互いに影響を及ぼしあっていることがわかる(わかる方コメントください涙)。

そこでbeforeEachを使って書きなおす。

describe "SomeClass", ->
  object = undefined
  beforeEach ->
    object = new SomeClass

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

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

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

すると、テストは無事成功する。丁寧にbeforeEachを使っておいた方が良さそうだとわかる。


ブログやってます:PAPA-tronix !

Feel-Physics
今はHoloLensのアプリを開発しており、技術記事はすべてブログ( http://weed.nagoya )に書いています。以前はSwift、OpenCV+Python、JavaScript、Objective-Cを書いていました。
http://weed.nagoya
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした