JanGaJan.com

Is fun? JOY!

Cucumber on Rails 入門2

前回 に引き続き簡単なCucumberのテストケースを作ります。

サンプルソースはこちらです。
ta1kt0me/cucumber-test

ライブラリ バージョン
ruby 2.1.5
rails 4.1.5
cucumber 1.3.17

今回やること

  1. givenを使う
  2. andを使う
  3. backgroundを使う
  4. 1つのシナリオにWhen-Thenを複数回書く

given

givenを利用して、テストデータの投入を行います。
Factory Girl使います。

Gemfile
1
2
3
4
5
group :test do
  gem 'cucumber-rails', require: false
  gem 'database_cleaner'
  gem 'factory_girl_rails' # 追加
end
Gemfile
1
2
$ bundle
$ bundle exec rails g factory_girl:model Book title:string author:string price:integer
features/home_page.feature
1
2
3
4
5
6
  ...
  Scenario: Viwing application's home page
    # 追加
    Given there's a book titled 'Alice\'s Adventures in Wonderland' with 'Lewis Carroll' author, '1000' yen
    When I am on the top page
    ...
features/step_definitions/home_page_steps.rb
1
2
3
4
5
# 追加
Given(/^there's a book titled '(.*?)' with '(.*?)' author, '(\d+)' yen$/) do |title, author, price|
  @book = FactoryGirl.create(:book, title: title, author: author, price: price)
end
...

(自分用メモ:改善点)
シングルクォートで囲まないでもいいかも。
テストケース内で利用しない限りあえてインスタンス変数にする必要もないなー。

and

続いてand。これは簡単です。

features/home_page.feature
1
2
3
...
Then I should see the 'Listing books'
And  I should see the 'Alice\'s Adventures in Wonderland'

応用きくやつです。

background

シナリオの前に複雑な操作や処理をしたい場合に有効です。
Bookの作成ページをテストするシナリオの前段として、トップページを表示する操作をbackgroundで書いてみます。
なお、このシナリオではリンク・ボタン操作やフィールド入力をするので、便利なcapybara-webkitを導入します。

1
2
3
4
5
6
group :test do
  gem 'cucumber-rails', require: false
  gem 'database_cleaner'
  gem 'factory_girl_rails'
  gem 'capybara-webkit' # 追加
end
1
$ bundle

新しいシナリオ、new_page.featureを作ります。

features/new_page.feature
1
2
3
4
5
6
7
8
Feature: New Page

  Background:
    Given I go to the top page

  Scenario: Adding New Book
    When I click 'New Book' link
    Then I should see the 'New book'
features/step_definitions/new_page_steps.rb
1
2
3
4
5
6
7
Given(/^I go to the top page$/) do
  visit root_path
end

When(/^I click '(.*?)' link$/) do |link_name|
  click_link(link_name)
end

1つのシナリオにWhen-Thenを複数回書く

new_page.featureを完成させましょう。

  1. ‘New Book'リンクを押したら、'New Book'タイトルが表示される
  2. ‘Title’,‘Author’,‘Price'を入力して、'Create Book'ボタンを押したら、'Book was successfully created.'というメッセージと入力した内容が表示される

というシナリオを作ります。

features/new_page.feature
1
2
3
4
5
6
7
8
9
10
11
12
  ...
  Scenario: Adding New Book
    When I click 'New Book' link
    Then I should see the 'New book'
    When I fill in 'Title' with 'Star Wars'
    And I fill in 'Author' with 'George Walton Lucas, Jr'
    And I fill in 'Price' with '2980'
    And I click 'Create Book' button
    Then I should see the 'Book was successfully created.'
    And I should see the 'Star Wars'
    And I should see the 'George Walton Lucas, Jr'
    And I should see the '2980'
features/step_definitions/new_page_steps.rb
1
2
3
4
5
6
7
8
...
When(/^I click '(.*?)' button$/) do |button_name|
  click_button(button_name)
end

When(/^I fill in '(.*?)' with '(.*?)'$/) do |field, value|
  fill_in(field, with: value)
end

capybara-webkitですが、チートシートがあるので有効活用しましょう。

stepsで定義した操作は共通化してあげると良いですね。

Comments