1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails Tutorial-第7章メモ_part2

Posted at

##リスト7.16のテストについて

今回出てきた、fill_inメソッド周辺がよくわからなかったので、少しだけ調べてみた。

####リスト7.16 ユーザー登録の基本的なテスト

user_pages_spec.rb

require 'spec_helper'
  2 describe "User pages" do
  3 
  4 #RSpec.describe "UserPages", :type => :request do
  5 #describe "GET /user_pages" do
  6  #   it "works! (now write some real specs)" do
  7   #    get user_pages_index_path
  8    #   expect(response).to have_http_status(200)
  9     #end
 10   #end
 11 #end
 12 
 13   subject { page }
 14 
 15   describe "profile page" do
 16     let(:user) { FactoryGirl.create(:user) }
 17     before{ visit user_path(user) }
 18 
 19     it{ should have_content(user.name) }
 20     it{ should have_title(full_title(user.name)) }
 21   end
 22 
 23   describe "signup page" do
 24     before { visit signup_path }
 25 
 26     it{ should have_content('Sign up') }
 27     it{ should have_title(full_title('Sign up')) }
 28   end
 29 
 30   describe "signup" do
 31     before{ visit signup_path }
 32 
 33     let(:submit){"Create my account"}
 34 
 35     describe "with invalid information" do
 36       it "should not create a user" do
 37         expect{ click_button submit }.not_to change(User, :count)
 38       end
 39     end
 40 
 41     describe "with valid information" do
 42       before do
 43         fill_in "Name",         with: "Example User"
 44         fill_in "Email",        with: "user@example.com"
 45         fill_in "Password",     with: "foobar"
 46         fill_in "Confirmation", with: "foobar"
 47       end
 48 
 49       it "should create a user" do
 50         expect { click_button submit }.to change(User, :count).by(1)
 51       end
 52     end
 53   end
 54 end                              

Capybaraのメソッドfill_inは、フォームへの入力をシュミレートするらしい。

visit signup_path

fill_in "Name",         with: "Example User"
fill_in "Email",        with: "user@example.com"
fill_in "Password",     with: "foobar"
fill_in "Confirmation", with: "foobar"

fill_in "Name", with: "Example User"

例えば上記を実行することで、fill_in後の"Name"に、with後の文字列、"Example User"が入力されたことをシュミレートできている。

このブロックでは上記のシュミレーションを実行した後、

expect { click_button submit }.to change(User, :count).by(1)

ここでchangeメソッドを用いてボタンクリック前後のユーザー数が1だけ変化しているかどうかを観測している。

またこのexepctメソッドは、従来のshouldメソッドと同等のものらしい。よって書き換えも可能で、

expect { click_button submit }.to

{ click_button submit }.should

と書き換えられる...と思ったのだが。

どうやらshouldではブロックを扱うことができないらしい。

よって正しくは

submit { click_button }.should

とする必要があった。

見た目的に、expectの方がすっきりしてイイネ。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?