失败测试的Rspec错误不同于浏览器中看到的错误

时间:2015-01-03 21:35:14

标签: ruby-on-rails rspec tdd bdd rspec3

我在我的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文件时,即使我将链接添加到页面,我也会看到不同的错误?

由于

2 个答案:

答案 0 :(得分:1)

别忘了Capybara正在打开一个浏览器会话,该会话在新流程中运行,并像用户一样导航到路径。您的Rails应用程序确实可能会引发异常,但Capybara只是在浏览器中查看响应 - 它不知道Rails服务器运行过程中发生了什么。因此,它尽职尽责地访问网址,获取500错误页面,查找链接,(当然)无法找到它。

答案 1 :(得分:0)

这是因为链接未添加到页面中。未定义new_todo_path,这可能意味着您尚未在routes.rb文件中为其添加正确的路由。