40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

jasmineでテストケースが増えてきた状況で特定のテストだけ実行したい場合には?

答え

xdescribe、xitを利用すればOK

特定テストだけ実行したくなってきた背景について

Qiitaのビューワーアプリ作ってる中で、自然とQiitaAPIのライブラリのようなものが出来つつあり、そのライブラリのテストをjasmine使って書いてます。

10個強程度のテストケースとはいえ、毎回QiitaのAPIにアクセスしつつ、全部のテストケースが実施されるのはちょっとなぁーと思っていました。

直近テストしたいのは、自分がストックした投稿に関する部分の処理のみでこれをどうにかしたいというのがそもそものきっかけでした

最初考えたアプローチ

coffee/test/tests.coffee内で、実施するテストケースを切替ることを考えました

具体的には

(() ->
  
if testsEnabled
  
  # use Ti.include for jasmine to be a global variable 
  # and being able to drop in jasmine library as is, without modifications
  
  Ti.include('/test/lib/jasmine-1.3.1.js')
  Ti.include('/test/lib/jasmine.async.min.js')
  require('test/lib/jasmine-titanium-console')
  
  # include custom tests
  require('test/example')
  # require('test/qiita')
  
  jasmine.getEnv().addReporter(new jasmine.TitaniumReporter())
  jasmine.getEnv().execute()

)

という感じで、上記の require('test/XXX') の部分を必要に応じてコメントアウトするアプローチです

これでもいいのですが、example.coffeeに書いて、テストパスして、それを本来のファイルにコピペっていうのはなんかスマートでないなぁと思ったので、結局そのアプローチをやめました

xdescribe、xitを知ったきっかけのBetter TDD Workflow via Exclusive Tests in Jasmine and Mocha という記事

その後、「jasmine 特定」みたいなキーワードで調べていたら、たまたまBetter TDD Workflow via Exclusive Tests in Jasmine and Mocha という記事を見つけて、その記事中にAdd ddescribe, iit for exclusive suites,specsというpull requestがあったことを知りました

これまで自分が使っていたjasmineのバージョンで使えるかどうかわからなかったので、ひとまず最新版(この記事書いてる時点で1.3.1)をダウンロード。

その上で、

ddescribe 'QiitaのStaticプロパティへのアクセス', ->
  it '指定のurlプロパティにアクセスした場合に値が一致する', ->
    Qiita = require('qiita')
    qiita = new Qiita()
    url = "https://qiita.com/api/v1/users/h5y1m141@github/stocks"
    expect(qiita.parameter.stocks.url).toBe(url)

みたいな感じにしたのですが、ddescribeっていうのは存在しないと怒られました。

jasmine1.3.1のソースにddescribeというものがあるか検索しても確かに見つからず、その代わりにxdescribeという単語を見つけた

xdescribe 'QiitaのStaticプロパティへのアクセス', ->
  it '指定のurlプロパティにアクセスした場合に値が一致する', ->
    Qiita = require('qiita')
    qiita = new Qiita()
    url = "https://qiita.com/api/v1/users/h5y1m141@github/stocks"
    expect(qiita.parameter.stocks.url).toBe(url)

と書いたら、意図したように実行されました

※上記テストケースの残りはGitHubをご覧ください