0

私は、Michael Hartl の Rails チュートリアルのセクション 7.2.2 (第 7 章) にいます。@user 変数を追加すると、app/controllers/users_controller.rbおかしくなりました。現在合格するはずのテストは合格しません。代わりに、別の理由で失敗します。

$ rspec spec/requests/user_pages_spec.rb -e "signup page"

Failures:

1) User pages signup page 
 Failure/Error: before { visit signup_path }
 ActionView::Template::Error:
   undefined method `users_path' for #<#<Class:0x007fdec372a8e0>:0x007fdec375d010>
 # ./app/views/users/new.html.erb:6:in `_app_views_users_new_html_erb___2884421820517152565_70297369620580'
 # ./spec/requests/user_pages_spec.rb:8:in `block (3 levels) in <top (required)>'

2) User pages signup page 
 Failure/Error: before { visit signup_path }
 ActionView::Template::Error:
   undefined method `users_path' for #<#<Class:0x007fdec372a8e0>:0x007fdec45caee0>
 # ./app/views/users/new.html.erb:6:in `_app_views_users_new_html_erb___2884421820517152565_70297369620580'
 # ./spec/requests/user_pages_spec.rb:8:in `block (3 levels) in <top (required)>'

最初は、これらのテストは @user が nil であるために失敗します。現在、未定義のメソッドが原因で失敗しています。

この本では、@user を定義したらパスする必要があると示唆しているので、混乱しています。おそらくこれでうまくいくだろうと考えて少し先に進みましたが、うまくいかなかったので、先に進む前にこれを理解したいと思います。

問題のテストは次のとおりです(本からコピー):

require 'spec_helper'

describe "User pages" do
  subject { page }

  describe "signup page" do
   let(:user) { FactoryGirl.create(:user) }
   before { visit signup_path }
   it { should have_selector('h1', text: 'Sign up') }
   it { should have_selector('title', text: full_title('Sign up')) }
  end
end 
4

1 に答える 1

1

プロジェクトを最初から再度開くと、別のエラーが発生し、次のタイプミスを発見しましたconfig/environments/test.rb

# Speed up tests by lowering BCrypt's cost function. require 'bcrypt'
silence_warnings do
  BCrypt::Engine::DEFAULT_COST = BCrypt::Engine::MIN_COST
end

独自の行に移動require 'bcrypt'することで、元の質問のテストを含め、すべてが再び機能します。

# Speed up tests by lowering BCrypt's cost function. 
require 'bcrypt'
silence_warnings do
  BCrypt::Engine::DEFAULT_COST = BCrypt::Engine::MIN_COST
end
于 2012-06-20T03:00:30.043 に答える