Używam Cucumber/Capybara z Rails 3 i próbuję potwierdzić istnienie obrazu po przesłaniu. Nie wiem, jak sprawdzić adres URL obrazu, aby go zweryfikować.Jak znaleźć obraz na stronie z Cucumber/Capybara w Railsach 3
Mam następujący scenariusz:
Scenario: Create new listing
Given I am on the new listing page
When I fill in "listing_name" with "Amy Johnson Photography"
And I attach the file "features/support/test_image.jpg" to "listing_images_attributes_0_photo"
And I press "Create"
Then I should see "Amy Johnson Photography"
And I should see the image "test_image.jpg"
Wszystko przechodzi z wyjątkiem ostatniego kroku.
Próbowałem to dla mojej definicji krok, który działa świetnie, jeśli jest to tekst na stronie, ale nie dla adresu URL obrazu:
Then /^I should see the image "(.+)"$/ do |image|
if page.respond_to? :should
page.should have_content(image)
else
assert page.has_content?(image)
end
end
Potem próbowałem też coś tego kroku definicja zamiast:
Then /^I should see the image "(.+)"$/ do |image|
html = Nokogiri::HTML(response.body)
tags = html.xpath('//img[@src="/public/images/foo.png"]')
# tags.length.should eql(num_of_images)
end
co powoduje następujący błąd:
And I should see the image "test_image.jpg" # features/step_definitions/listing_steps.rb:41
undefined method `body' for nil:NilClass (NoMethodError)
./features/step_definitions/listing_steps.rb:42:in `/^I should see the image "(.+)"$/'
features/manage_listings.feature:24:in `And I should see the image "test_image.jpg"'
jestem zakładając potrzebujesz kroku nokogiri, aby znaleźć to poprawnie. Lub jeśli jest lepszy sposób, jestem otwarty na sugestie. Jak mogę sprawdzić, czy obraz, który właśnie przesłałem, znajduje się na stronie? Dzięki.
W swojej definicji kroku otrzymujesz wspólny błąd capybara. Spróbuj użyć "page.body" zamiast "response.body", jeśli dobrze pamiętam. – Mauricio
Nie wiem, czy można użyć wyrażenia regularnego w ścieżce xpath, ale jeśli masz dostęp do instancji Listing, możesz po prostu użyć interpolacji ciągów znaków "// img [@src = '/ public/images/# {@ listing_id } /foo.png '] " – monocle
Ta strona zawiera dobre referencje selektora CSS3, które pomogą ci: http://reference.sitepoint.com/css/css3attributeselectors – sivabudh