2012-06-19 49 views
0

我在Michael Hartl的Rails教程的第7.2.2節(第7章)中,當我將@user變量添加到app/controllers/users_controller.rb時,事情變得很奇怪。現在應該通過的測試不會 - 因爲其他原因而失敗:Rails教程7.2.2 UsersController問題

$ 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)>' 

最初,這些測試失敗b/c @user爲零。現在由於未定義的方法而失敗。

這本書建議他們應該通過一次我定義@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 

回答

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