RSpec 3.2和Capybara 2.4在RoR 4.2.1中的表现不如预期

时间:2015-04-29 21:14:37

标签: ruby-on-rails rspec capybara

我已经使用RSpec和Capybara with Rails进行单元和集成(功能)测试几年,并且我已经习惯了基于组合应用程序行为的特定工作流程。但是,我刚刚开始使用全新的Rails应用程序并且行为已经改变或者我设置了错误。 我使用Ruby on Rails 4.2.1,RSpec core 3.2.3,Rspec rails 3.2.1和Capybara 2.4.4。所有这些都是本文撰写时的最新版本。我尝试过使用require' capybara-rails'并要求' capybara-rspec'在Capybara文档中指出的行,我试图完全没有使用这些要求。 这是一个简单的功能规范(根据需要位于spec / features中): 要求' rails_helper'

feature 'Viewing the list of people', type: :feature do
  scenario 'returns a message if there are no people records' do
    visit root_url

    click_link 'People'

    expect(current_path).to eq(people_path)
    expect(page).to have_text('There are no people matching your request.')
  end
end

当我第一次在空应用程序中运行规范时,我得到的错误是没有root_url,这是预期的。但是,当我将路线设置为route to: 'home#index'时,我看到的下一个错误是"无法找到链接'人物'。通常情况下,我会看到丢失的控制器出错,然后在出现此错误之前看到丢失的模板。当我创建家庭控制器和index.html文件,然后再次运行规范时,我收到错误"无法找到文本"没有人......"。我没有收到有关缺少people_path或缺少People控制器或模板文件的错误。当我将resources :people添加到routes.rb时,即使我还没有创建人员控制器或索引模板,规范也会通过,因此无论是Capybara还是RSpec都无法读取预期的字符串,除非在规范本身。 错误在浏览器中正常显示 - 如果我浏览器检查每个步骤,我会看到所有预期的消息。 还有其他人遇到过这个问题吗?它完全破坏了我的工作流程"按照消息"确保所有MVC组件都已到位,然后下载到单元测试以获取实现细节。

1 个答案:

答案 0 :(得分:0)

升级到rspec-rails 3。3。3(2015年6月6日发布),没有进行任何其他更改,问题已经消失。为了验证,我使用rspec-rails 3.2.1设置了另一个Rails应用程序并复制了该问题。将该应用程序升级到rspec-rails 3.2.3后,它就消失了。 我认为可以肯定地说,造成这个问题的任何问题都已得到解决。我还没有时间查看提交,所以我不知道它是如何完成的。