我在我的rails app中使用了RSpec v3.1.0和Capybara v2.3.0。我的 spec / features / user_creates_todo_spec.rb 中有以下内容。
require 'rails_helper'
feature 'User creates todo' do
scenario 'successfully' do
visit root_path
click_on 'Add a new todo'
fill_in 'Title', with: 'Buy milk'
click_on 'Submit'
expect(page).to have_css '.todos li', text: 'Buy milk'
end
end
然后在我的 app / views / todos / index.html.erb 中,我添加了以下内容:
<%= link_to "Add a new todo", new_todo_path %>
当我运行 rspec spec / features / user_creates_todo_spec.rb 时,测试失败并显示错误 Capybara :: ElementNotFound:无法找到链接或按钮&#34;添加新的待办事项& #34;
但是,我希望错误是:未定义的本地变量或方法&#39; new_todo_path&#39; ,因为我已经在我的视图中定义了链接。奇怪的是,当我运行rails服务器并从浏览器导航到根路径时,我看到未定义的局部变量或方法&#39; new_todo_path&#39;错误。当我从我的应用程序的根目录运行rake时,我看到未定义的路径错误。那么,为什么当我使用rspec单独运行spec文件时,即使我将链接添加到页面,我也会看到不同的错误?
由于
答案 0 :(得分:1)
别忘了Capybara正在打开一个浏览器会话,该会话在新流程中运行,并像用户一样导航到路径。您的Rails应用程序确实可能会引发异常,但Capybara只是在浏览器中查看响应 - 它不知道Rails服务器运行过程中发生了什么。因此,它尽职尽责地访问网址,获取500错误页面,查找链接,(当然)无法找到它。
答案 1 :(得分:0)
这是因为链接未添加到页面中。未定义 new_todo_path
,这可能意味着您尚未在routes.rb
文件中为其添加正确的路由。