ja ja ja en en ja ja en ja nl ja ja en ja ja en ja en ja en ja en ja ja en ja en ru en pl en ja ja ja en ja en ja en en ja en ja ja en ja en ja en ja en ja ja en ja en ja ja en en ja ja en ja en ja en ja kn ja en nl ja nb ja ja en ja ja en ja ja nb ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja cv es es ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja
module MyHelper def some_helper # ... end end World(MyHelper)
class MyWorld def some_helper #... end end World do MyWorld.new end
19.3 Calling steps within step definitions
cucumberは下記の三つのメソッドでフックを実現している。
scnenarioの前
hookはfeatures配下ならどこでも定義できるけどfeatures/support/hooks.rbに書くのがおすすめらしい。
また、hookは何回でも定義できる。例えばBeforeが10個あっても問題ない。
tagged hooks
特定のscenarioだけで実行させたいhookがあるときに使う。
Before("@foo") do puts "This will run before each scenario tagged with @foo" end
コマンドラインでの--tagsのようにするともっと複雑な条件を使える
Before("@foo,~@bar", "@zap") do puts "This will run before each scenario tagged with @foo or not @bar AND @zap" end
hookは便利だけど技術者以外にはよく分からないという欠点がある。技術者以外の人にわかるようにしたい場合はBackgroundを使う。
19.5 Background
Backgroundは与えられたfeature内の全てのシナリオの前に実行される。featureのなかで参照したいときにBefore hookの代わりとして使う。Feature内で共通したGivenをくくってBackgroundにだしてやると見通しが良くなりそう。
BeforeはBackgroundより前に実行される。
19.6 Multi-line Text
下記のようにすると複数行のテキストを引数にとれる。marginは最初の"で決まる。
Scenario: pending implementation Given a file named "example_without_block_spec.rb" with: """ describe "an example" do it "has not yet been implemented" end """ When I run "spec example_without_block_spec.rb" Then the exit code should be 0 And the stdout should include """ Pending: an example has not yet been implemented \(Not Yet Implemented\) .\/example_without_block_spec.rb:2 Finished in ([\d\.]*) seconds 1 example, 0 failures, 1 pending """ # ...
複数行のテキストは正規表現でキャプチャする必要はない。正規表現に含まれなかった文字列はブロックの最後の引数にはいる。
Given /a file named "([^\"]*)" with:/ do |filename, text| # ... end Then /the stdout should include/ do |text| # ... end
step中の文字は正規表現で評価されるので、複数行のテキスト中に()等の、正規表現で使われる特別な文字がある場合はがある場合はescapeをしておく必要がある
19.7 Tables in Steps
wikiスタイルのフォーマットでtableを表現できる。cucumberは行の最初に "|" を見つけたときにパースして、Cucumber::Ast::Tableオブジェクトにする。Cucumber::Ast::Tableオブジェクトは、hashの配列を返すhashesメソッドを持っている。
CucumberはCucumber::Ast::TableをStep definition中の最後のブロック引数として渡す。
Scenario Outlines
Scenariosキーワードで、Scenario Outlineに流し込むデータをテーブルで定義できる。
Scenario Outline: submit guess Given the secret code is " " When I guess " " Then the mark should be " " Scenarios: all numbers correct | code | guess | mark | | 1234 | 1234 | ++++ | | 1234 | 1243 | ++-- | | 1234 | 1423 | +--- | | 1234 | 4321 | ---- |
ScenariosのエイリアスとしてExamplesキーワードもある。
複数行のテキストや、テーブルの値にもscenario outlineは使える。
Scenario Outline: Given a discount of   When I order the following book: | title | price | | Healthy eating for programmers |   | Then the statement should read: """ Statement for David Total due:   """ Scenarios: | discount | price | total | | 10% | $29.99 | $26.99 | | 15% | $29.99 | $25.49 |
19.9 Configuration
cucumberのオプションをあらかじめ書いておくためのファイルとして cucumber.yml または config/cucumber.yml が定義されている。
例えば cucumber.yml に下記のように書いて
wip: --tags @wip features
下記のように実行すると
cucumber -p wip
下記のようにしたのと同じ結果になる
cucumber --tags @wip features
rails だと、自動的にdefaultと言う名前のprofileが探されるようなので
default: --format pretty
などとしておくと大変都合がいい。
willnet 2010-06-03 21:36
minitest/spec で指定のテストだけを実行する
下記のような minitest で書かれたテストがあるとします。 # te…
capybara-webkit と font-awesome を仲良くさせる方法
皆さん、font-awesome は使っていますか?font-awesomeは、twit…
rails generate controller で無駄な helper や assets を生成…
rails generate controller で controller を生成すると、必要…
Fabrication 2.0 アップグレードガイド
いつの間にか Fabrication がバージョン2になっていて、そこで…
Capybara の README 意訳
注意 この訳はだいぶ古い(2011年7月時のREADME)です。最新版の…
« Chapter 17 Extending RSpec その2 mac ports で nginx をインストール »
id:willnet はてなブログPro
べんりで楽しいwebサービスをたくさん作りたい
読者です 読者をやめる 読者になる 読者になる
@netwillnetをフォロー
失敗したテストのログだけを出力するぞ
iCARE Dev Meetup #34で登壇しました
`Thread.current[:hoge]`はスレッドローカル変数を参照していると思いきや実際はファイバーローカル変数だった