Настройка page/respone.body в Capybara для работы в Webrat
Я мигрирую в Капибару. Одна из проблем, с которыми я столкнулся, - это перенос шага в формате PDF.
Этот шаг устанавливает page.body в разобранный pdf. Таким образом, я могу использовать шаги огурца по умолчанию.
When 'I follow the PDF link "$label"' do |label|
click_link(label)
page.body = PDF::Inspector::Text.analyze(page.body).strings.join(" ")
end
Ex.
When I follow the PDF link "Catalogue"
Then I should see "Cheap products"
Я получаю следующую ошибку:
undefined method `body=' for #<Capybara::`enter code here`Document> (NoMethodError)
3 ответа
Решение
В capybara нет никакого установщика для тела, определенного в источнике, поэтому вы не можете установить его таким образом. Попробуйте это (не проверено):
page.instance_variable_set(:@body, PDF::Inspector::Text.analyze(page.body).strings.join(" "))
На вершине, убедитесь, что вы установили :js => true
как это:
scenario 'do something', :js => true do
str = PDF::Inspector::Text.analyze(page.body).strings.join(" ") # or whatever string you want
# then just use javascript to edit or add the body
page.evaluate_script("document.write(#{str});")
end
Теперь это зависит от драйвера, но это одно из решений...
Это сработало для меня:
Then /^I should be served the document as a PDF$/ do
page.response_headers['Content-Type'].should == "application/pdf"
pdf = PDF::Inspector::Text.analyze(page.source).strings.join(" ")
page.driver.response.instance_variable_set('@body', pdf)
end
Then /^I should see the document details$/ do
page.should have_content("#{@document.customer.name}")
page.should have_content("#{@document.resources.first.resource.name}")
page.should have_content("Document opened at #{@document.created_at.strftime("%e-%b-%4Y %r")}")
end
Обратите внимание, что я работаю с PDF
pdf = DocumentPdf.new(@document)
send_data pdf.render, :filename => "document_#{@document.created_at.strftime("%Y-%m-%d")}",
:type => "application/pdf",
:disposition => "inline"