cucumber事始め(2)

前回の続き。
cucumber事始め - うんたらかんたらRuby - Rubyist


railscasts

railscastsの
2つのシナリオ(一覧表示を追加、新規追加を修正)を日本語で書くとこうなる。
Railscasts - Beginning with Cucumber



修正前

#features/manage_articles.feature
Feature: Manage articles
  管理者は、ブログの記事を管理できる
  
  Scenario: 記事を登録する
    Given "新規記事"ページを表示している
    When  "タイトル""タイトル 1"と入力する
    And   "コンテンツ""コンテンツ 1"と入力する
    And   "送信"ボタンをクリックする
    Then  "タイトル 1"と表示されていること
    And   "コンテンツ 1"と表示されていること

  Scenario: 記事を削除する
    Given 以下の記事を作成する:
      |title|content|
      |タイトル 1|コンテンツ 1|
      |タイトル 2|コンテンツ 2|
      |タイトル 3|コンテンツ 3|
      |タイトル 4|コンテンツ 4|
    When 3番目の記事を削除する
    Then 以下の記事を表示していること:
      |Title|Content|
      |タイトル 1|コンテンツ 1|
      |タイトル 2|コンテンツ 2|
      |タイトル 4|コンテンツ 4|

#step_definitions/article_steps.rb
Given /^以下の記事を作成する:$/ do |articles|
  Article.create!(articles.hashes)
end

When /^(\d+)番目の記事を削除する$/ do |pos|
  visit articles_path
  within("table tr:nth-child(#{pos.to_i+1})") do
    click_link "削除"
  end
end

Then /^以下の記事を表示していること:$/ do |expected_articles_table|
  expected_articles_table.diff!(tableish('table tr', 'td,th'))
end


修正後

#features/manage_articles.feature
Feature: Manage articles
  管理者は、ブログの記事を管理できる

  Scenario: 記事一覧を参照する
    Given 以下の記事を作成する:
    |title|content|
    |ピッツァ   |コンテンツ 1|
    |フランスパン |コンテンツ 2|
    When  "記事一覧"ページを表示する
    Then  "ピッツァ"と表示されていること
    And   "フランスパン"と表示されていること
  
  
  Scenario: 記事を登録する
    Given 記事を全て削除する
    And   "記事一覧"ページを表示している
    When  "新規記事"ページを表示する
    And   "タイトル""ジャガイモ"と入力する
    And   "コンテンツ""美味しいジャガイモ料理"と入力する
    And   "送信"ボタンをクリックする
    Then  "記事作成が正常に行われました"と表示されていること
    And   "ジャガイモ"と表示されていること
    And   "美味しいジャガイモ料理"と表示されていること
    And   記事の件数は1件となる

  Scenario: 記事を削除する
    Given 以下の記事を作成する:
      |title|content|
      |タイトル 1|コンテンツ 1|
      |タイトル 2|コンテンツ 2|
      |タイトル 3|コンテンツ 3|
      |タイトル 4|コンテンツ 4|
    When 3番目の記事を削除する
    Then 以下の記事を表示していること:
      |Title|Content|
      |タイトル 1|コンテンツ 1|
      |タイトル 2|コンテンツ 2|
      |タイトル 4|コンテンツ 4|


#step_definitions/article_steps.rb
Given /^以下の記事を作成する:$/ do |articles|
  Article.create!(articles.hashes)
end

When /^(\d+)番目の記事を削除する$/ do |pos|
  visit articles_path
  within("table tr:nth-child(#{pos.to_i+1})") do
    click_link "削除"
  end
end

Then /^以下の記事を表示していること:$/ do |expected_articles_table|
  expected_articles_table.diff!(tableish('table tr', 'td,th'))
end

Given /^記事を全て削除する$/ do
  Article.delete_all
end

Then /^記事の件数は(\d+)件となる$/ do |count|
  Article.count.should == count.to_i
end