【问题标题】:inconsistent Rspec/Capybara tests不一致的 Rspec/Capybara 测试
【发布时间】:2012-04-12 17:14:24
【问题描述】:

我已经在我的 routes.rb 文件中注释掉了 [get "pages/home"],重新启动了我的整个测试环境并且以下测试仍然通过:

it "should contain 'This is a test'" do
  get 'home'
  response.body.should have_selector("p")
end

据我了解,capybara 从内存中的“浏览器”运行 rspec 测试。如果是这种情况,rails 路线必须存在!注释掉我的路线后,它仍然能够加载页面 - 我知道这一点,因为如果我删除 <p> 选择器,测试将失败。修改 routes.rb 文件后,我重新启动了我的测试套件,但没有任何区别。

这让我对测试过程失去了信任,因为我通过了不应该通过的测试!!

【问题讨论】:

  • 向我们展示完整的_spec.rb。也许你在某处有before(:each)get 'home'

标签: ruby-on-rails rspec capybara


【解决方案1】:

看起来这个片段在控制器规范中,它直接命中你的控制器。在 rspec 的最新版本 2.9.0 中,错误的路由不会导致此示例失败。路由不在控制器规范的范围内。

您似乎打算编写一个请求规范,它应该使用水豚的visit 方法:

# spec/requests/something_spec.rb
require 'spec_helper'

describe 'home page' do

  it "should contain 'This is a test'" do
    visit '/pages/home'
    page.should have_content 'This is a test'
  end

end

有关更多示例,请参阅capybara docs。 Rspec 也支持routing specs,但我通常只使用那些不寻常的路由。

【讨论】:

  • 非常有趣。所以我一直在'it'块内[get'home'],它甚至没有击中Capybara?我认为 [get 'something'] 叫 Capybara,但显然它只是 Rspec。它是否正确?是的,这是一个控制器测试。
  • 是的,capybara 添加了visitclick_onfill_in 等。请查看上面链接的 capybara 文档以获取大量示例。
猜你喜欢
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
相关资源
最近更新 更多