0

我四处搜索,这似乎是一个很常见的问题,但对我没有任何帮助。开始!

首先,我正在学习 Hartl RoR 教程。我即将结束第 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_pathvisit '/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

有任何想法吗?

4

1 回答 1

0

我必须进行大量更新才能使您的代码运行。我已经有一段时间没有在我的家用机器上完成 Rails 了,所以让它全部更新是件好事。

找到了一个让命名路由工作的解决方案,但这只是导致了另一个问题。最后灯亮了。你在错误的地方做测试。用户模型规范不是您测试登录的地方。正如您所提到的,另一个类似的测试有效。那是在请求规范中。访问命令和命名路由设计为在该目录中工作。

于 2013-04-07T12:22:54.033 回答