Vue.jsのビューモデルのテストを書いてみた

こんにちは。明日はウルトラ花金です、きたけーです。

この前かいたVue.jsのコード(Vue.jsでページネーションを実装してみる - きたけーTechブログ, Vue.js で 複数のViewModelを連携させる - きたけーTechブログ)のテストをMocha+Chaiで書いてみた。

(微妙なコードですけど)こんなかんじ。

describe Menus, ->
  beforeEach ->
    @menus = new Menus
      data:
        menus: [
          {name: "ikura", price: 100},
          {name: "tako", price: 200},
          {name: "maguro", price: 300},
          {name: "uni", price: 400},
          {name: "toro", price: 500}
        ]

  it "はじめのページであること", ->
    expect(@menus.isStartPage).to.be(true)

  it "設定された個数分、ネタが取得できること", ->
    expect(@menus.displayMenus.length).to.be(@menus.$data.displaySize)

  it "ページが進むと、最後のページであること", ->
    @menus.showNext()
    expect(@menus.isEndPage).to.be(true)

  it "ページが進むと、ひとつだけネタが取得できること", ->
    @menus.showNext()
    expect(@menus.displayMenus.length).to.be(1)

  it "最後のページから、次のページに進もうとしても進まないこと", ->
    @menus.showNext()
    lastPage = @menus.$data.page
    @menus.showNext()
    expect(@menus.$data.page).to.be(lastPage)

AngularのControllerでもいえると思うんですけど、テストを書くことで自ずとDOMとか通信に依存しない良いコードになりそうなかんじ(依存していたらテストコード書きづらい)。

Railsのプロジェクトで書いていたので、テストランナーはteaspoonを選択しました。Railsじゃないプロジェクト+mocha-phantomjsあたりでも走らせてみたいなぁ。