2011-06-02 82 views
1

我有以下觀點我不能符合規範出正確的觀點規格:如何將一個塊傳遞給have_selector?

文件:「產品/ index.html.haml」

#products 
    = render @products 

這是我的看法規格:

require 'spec_helper' 

describe "products/index.html.haml" do 
    let(:products) {[mock_model(Product)]} 

    before do 
    stub_template "products/product.html.haml" => "" 
    render 
    end 

    it "should render the products" do 
    rendered.should have_selector(#products) do 
    rendered.should render_template products 
    end 
end 

這裏的問題是,have_selector不接受一個塊,所以沒有辦法斷言局部呈現在#products div內。由於水豚匹配器不能在View規格內工作,因此您不能在兩者中使用。

也看到這個問題:https://github.com/rspec/rspec-rails/issues/387

回答

4

正確的答案是與webrat確實需要一個塊,水豚不。

下面是其中喬納斯·尼可拉斯,水豚的創作者解釋了爲什麼它沒有問題,並說他不打算將其添加:

https://github.com/jnicklas/capybara/issues/384

有使用對象#自來水通過一些實例阻止水豚的發現,也許曾經工作過,但似乎沒有工作了。

UPDATE:從大衛確認,有沒有辦法做到這一點目前使用RSpec /水豚:

https://groups.google.com/forum/?fromgroups=#!topic/rspec/HBfznq4Yd0k

0

我要做的就是測試的一類或ID,部分呈現。並且have_selector確實接受塊。

it "should render the products" do 
    rendered.should have_selector('#products') do |products| 
    products.should have_select('.product') 
    end 
    rendered.should render_template 'products' 
end 
+0

一個查看規格的主要優點是能夠隔離測試每一個人觀點。您的方法將部分與呈現它的視圖鏈接起來。此外,該塊只會傳遞「呈現」。它沒有檢查.product是否在#products – dwilkie 2011-06-09 04:37:55

+0

對不起,你錯了,它沒有通過渲染塊,但只有與選擇器相匹配的部分,因此你可以檢查'.product'是否在'#products'裏面。 – 2011-06-09 08:00:50

+2

抱歉,你錯了。親自嘗試一下。使用以下內容創建視圖:

其中.product不是嵌套在#products中。然後創建一個這樣的視圖規範,並在它失敗時觀察它。它「應該包含#產品」do rendered.should have_selector(「#products」)do | product | product.should have_selector(「。product」) end end – dwilkie 2011-06-11 06:20:29

相關問題