测试用户模型时,“visit * _path”不起作用

时间:2013-04-07 08:52:02

标签: ruby-on-rails rspec ruby-on-rails-3.2 railstutorial.org webrat

我已经四处寻找,这似乎是一个常见的问题,但没有任何对我有用。好了!

首先,我正在完成Hartl RoR教程。我即将结束section 9(视频905),我正在尝试测试用户登录失败。这是user_spec.rb中的代码:

   describe "failure" do  
     it "should not log the user in" do  
       visit login_path  
       puts response.body  
       fill_in 'session_email',    with: ""  
       fill_in 'session_password', with: ""   
       click_button  
       response.should have_selector('div.login_error', content: "Invalid")  
       response.should render_template('sessions/new')  
     end  
   end

这是自动测试错误:

  1) User login failure should not log the user in
 Failure/Error: visit login_path
 NameError:
   undefined local variable or method `login_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_5::Nested_1:0x00000102c79248>
 # ./spec/models/user_spec.rb:176:in `block (4 levels) in <top (required)>'

我尝试将visit login_path写为visit '/login',但仍然出现错误,但更改为:

Failure/Error: visit '/login'
 NoMethodError:
   undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_5::Nested_1:0x00000102c2d140>

这让我觉得这可能是一个webrat问题,因为我在某处读到'访问'来自webrat(而不是rspec)。我也知道它没有越过第一行,因为puts response.body没有出现在自动测试失败上。更令人困惑的是,在我的应用程序的另一部分,我有其他测试代码几乎相同,它工作正常。

layout_links_spec.rb

before(:each) do  
  @user = Factory(:user)  
  visit login_path  
  # puts response.body  
  fill_in 'session_email',    with: @user.email  
  fill_in 'session_password', with: @user.password  
  click_button  
end

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我必须做很多更新才能让你的代码运行。我有一段时间没有在家用机器上完成Rails所以最好把它全部更新。

找到一个解决方案,让命名路由工作,但这只会导致另一个问题。终于灯亮了。你在错误的地方进行测试。用户模型规范不是您测试登录的位置。如你所述,另一个类似的测试工作。这是在请求规范中。访问命令和命名路由旨在在该目录中工作。