Как вы можете передать блок в have_selector? - PullRequest
1 голос
/ 02 июня 2011

У меня есть следующее представление, которое я не могу правильно указать в спецификации представления:

file: "products / 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 не принимает блок, поэтому нет способа утверждать, что частичное визуализируется внутри div #products.Так как средства сопоставления Capybara не работают в пределах спецификаций View, вы не можете использовать их также.

См. Также эту проблему: https://github.com/rspec/rspec-rails/issues/387

Ответы [ 2 ]

4 голосов
/ 14 декабря 2012

Правильный ответ: вебрат действительно берет блок, а капибара - нет.

Вот проблема, в которой Джонас Никлас, создатель капибары, объясняет, почему это не так, и что он не планирует добавлятьit:

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

Было несколько примеров использования Object # tap для передачи блоков в #find capybara, который, возможно, когда-то работал, но, похоже, больше не работает.

ОБНОВЛЕНИЕ: подтверждение от Дэвида, что в настоящее время нет способа сделать это с помощью rspec / capybara:

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

0 голосов
/ 08 июня 2011

То, что я делаю, это тест для класса или идентификатора, который отображается частично. И 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
...