Ruby on Rails で RSpec を使うときのメモ
参考
vender/gems にインストールしたいので config/environment.rb に次を書き
config.gem('rspec', :lib => false)
config.gem('rspec-rails', :lib => false)
次を実行する。
rake gems:unpack:dependencies
rake gems:build
script/generate rspec
ちなみに config.gem の :lib は "Use :lib to specify a different name.", "To require a library be installed, but not attempt to load it, pass :lib => false" -- http://api.rubyonrails.org/classes/Rails/Configuration.html
ということらしい。テスト用なら :lib => false
にする。
ルートのテスト
ルートのテストでは route_to を使う。
{ :get => '/users' }.should route_to(:controller => 'users', :action => 'index')
{ :get => "/users/1" }.should route_to(:controller => 'users', :action => 'show', :id => '1')
{ :get => "/users/1/edit" }.should route_to(:controller => 'users', :action => 'edit', :id => '1')
{ :put => '/users/1' }.should route_to(:controller => 'users', :action => 'update', :id => '1')
{ :delete => '/users/1' }.should route_to(:controller => 'users', :action => 'destroy', :id => '1')
ビューのテスト
ビューのテストでは assigns[:key] でインスタンス変数を設定する。 flash[:key], params[:key], session[:key] もある。
assigns[:post] = @post = stub_model(Post,
:name => "value for name",
:title => "value for title",
:content => "value for content")
タグは have_tag で。 content_for は response[:capture].should have_tag を使う。
response.should have_tag('p', "名前")
response.should have_tag("form[action=?][method=post]", posts_path) do
with_tag("input#post_name[name=?]", "post[name]")
with_tag("input#post_title[name=?]", "post[title]")
with_tag("textarea#post_content[name=?]", "post[content]")
end
response[:footer].should have_tag(‘div’)
ヘルパーメソッドのモック、スタブは template オブジェクトで。
template.should_receive(:logged_in?).with().and_return(true)
template.should_receive(:current_user).with().and_return(mock(User))
コントローラのテスト
mock_model 使えば DB なしでテストできる。ログイン状態にしたいときなどは controller.stub! を使う。
@user = mock_model(User)
@user.stub!(:user_profile).and_return(@user_profile)
controller.stub!(:current_user).and_return(@user)
get :show, :id => 1
response.should be_success
response.should render_template("user_profiles/show.html.erb")
0 件のコメント:
コメントを投稿