【问题标题】:Rspec error for failing test different than the error seen in browser测试失败的 Rspec 错误与浏览器中看到的错误不同
【发布时间】:2015-01-03 21:35:14
【问题描述】:

我在我的 rails 应用程序中使用 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: Unable to find link or button "Add a new todo"强>

但是,我预计错误是:未定义的局部变量或方法'new_todo_path',因为我已经在我的视图中定义了链接。奇怪的是,当我运行 rails 服务器并从浏览器导航到根路径时,我看到了未定义的局部变量或方法“new_todo_path”错误。此外,当我从根运行 rake 时,我看到了未定义的路径错误我的应用程序。那么,为什么当我使用 rspec 单独运行规范文件时,即使我已将链接添加到页面,我也会看到不同的错误?

谢谢

【问题讨论】:

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


    【解决方案1】:

    不要忘记 Capybara 正在打开一个浏览器会话,该会话在一个新进程中运行,并导航到一个路径,就像用户一样。您的 Rails 应用程序可能确实会引发异常,但 Capybara 只查看浏览器中的响应——它不知道 Rails 服务器运行的过程中发生了什么。所以它尽职尽责地访问 url,得到 500 错误页面,寻找链接并且(当然)找不到它。

    【讨论】:

    • 有道理。谢谢 ! :)
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回复。但是,为什么当我从项目根目录运行 rake 时,会显示未定义的局部变量或方法“new_todo_path”的预期错误? .正如我在上面的问题中提到的那样,我的 app/views/todos/index.html.erb 中有 link_to 代码,但当我使用 rspec 单独运行规范时,它抱怨缺少链接而不是未定义的路线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多