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 で終わります。原因確認してる時間が無いのでとりあえずエントリ投入します。