Ruby on Rails Tutorial (4)
昨晩の続きですな。登録成功、な spec が以下。
describe "success" do before(:each) do @attr = { :name => "New User", :email => "user@example.com", :password => "foobar", :password_confirmation => "foobar" } end it "should create a user" do lambda do post :create, :user => @attr end.should change(User, :count).by(1) end it "should redirect to the user show page" do post :create, :user => @attr response.should redirect_to(user_path(assigns(:user))) end it "should have a welcome message" do post :create, :user => @attr flash[:success].should =~ /welcome to the sample app/i end end
- it should create a user
- it should redirect to the user show page
- it should have a welcome message
一気に全部入れちゃえ。
で、controller 方面にも修正を盛り込んでみたら new な試験にパスしません。
1) UsersController GET 'new' should be successful Failure/Error: get 'new' ActionView::Template::Error: undefined method `model_name' for NilClass:Class # ./app/views/users/new.html.erb:3:in `_app_views_users_new_html_erb__2642574762522034583_28265980__1746413993241375613' # ./spec/controllers/users_controller_spec.rb:26:in `block (3 levels) in <top (required)>'
あらら、と言いつつ controller なソースを見てたら
def new @title = "Sign up" end
ってなってて
@user = User.new
するのを忘れておりました。追加して green を確認。
RSpec Integration Test
これ風なナニも以前改修した blog engine で云々したなぁ。とりあえず以下らしい。
$ rails generate integration_test users invoke rspec create spec/requests/users_spec.rb $
で、spec/requests/users_spec.rb を以下に、な模様。
require 'spec_helper' describe "Users" do describe "signup" do describe "failure" do it "should not make a new user" do lambda do visit signup_path fill_in "Name", :with => "" fill_in "Email", :with => "" fill_in "Password", :with => "" fill_in "Confirmation", :with => "" click_button response.should render_template('users/new') response.should have_selector("div#error_explanation") end.should_not change(User, :count) end end end end
盛り込んでみて bundle exec rspec してみたのですが red で終わります。原因確認してる時間が無いのでとりあえずエントリ投入します。