Я использую cucmber для тестирования приложения php, и на самом деле он работает довольно хорошо.
У меня есть функция cucmber, которая использует следующий шаг для проверки наличия ссылки на странице:
Then /^I should see a link that contains "(.+)"$/ do |link|
assert !!(response_body =~
/<a ([\w\.]*="[\w\.]*" )*href="(http:\/\/)?([\w\.\/]*)?(#{link})/m), response_body
end
Теперь это работает, но это ужасно и сложно.
Первоначально я пытался использовать вещь xpath:
response_body.should have_xpath("//a[@href=\"#{link}\"]")
Но тогда, если я проверю ссылку на«blah.com», тогда он не будет соответствовать «http://blah.com"» - что побеждает всю цель теста.Отсюда причина, по которой я переключился на регулярное выражение.
Так есть ли более простой способ написать тест, который не основан на сложных регулярных выражениях?
Cheers.
EDIT:После долгих потянув за волосы ... я нашел менее грязный способ найти изображения на своей странице:
response_body.should include(image)
Где строка изображения установлена на что-то вроде 'myimage.png' - конечно,это прервется, если на странице будет настоящий текст «myimage.png», а не изображение.Должен быть лучший способ.Я рассматривал Hpricot, чтобы посмотреть, смогу ли я разобрать html и вытащить атрибут, который хочу протестировать, а затем протестировать его с помощью регулярного выражения, но все это выглядит так ... раздуто.