2012-03-29 125 views
0

我注释掉[得到“页/家”在我的routes.rb文件,重新启动我的整个测试环境和下面的测试还通过:不一致Rspec的/水豚测试

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

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

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

+0

向我们展示完整的'_spec.rb'。也许你有'之前(:每个人)''在'某个地方''回家'。 – 2012-03-29 06:25:22

回答

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,但我通常只使用那些用于不寻常的路由。

+0

非常有趣。所以我一直在'''''''''''''''''''''''''''''''''''''''''我认为[得到'某物']称为水豚,但显然它只是Rspec。它是否正确?是的,这是一个控制器测试。 – dingalingchickenwiing 2012-03-29 19:01:21

+0

是的,水豚增加了'visit',''click_on','fill_in'等等。看看上面链接的水豚文档中的很多例子。 – 2012-03-29 20:41:30