URL страницы похож на /people?search=name
то, что когда я использовал current_path
метод капибары, он /people
только возвращал .
current_path.should == people_path(:search => 'name')
Но это не говорит
expected: "/people?search=name"
got: "/people"
Как мы можем сделать это? Есть ли способ сделать это?
"/people?search=name"
это не путь ."/people"
это путьОтветы:
Я обновил этот ответ, чтобы отразить современные соглашения в капибаре. Я думаю, что это идеально, так как это принятый ответ, и на что многие люди обращаются, когда ищут решение. С учетом вышесказанного, правильный способ проверки текущего пути - использовать
has_current_path?
средство сопоставления, предоставленное Capybara, как описано здесь: Нажмите здесьПример использования:
Как видно из документации, доступны другие варианты. Если текущая страница есть,
/people?search=name
но вы заботитесь только о том, чтобы она была на/people
странице независимо от параметра, вы можете отправитьonly_path
опцию:Кроме того, если вы хотите сравнить весь URL:
Благодарим Тома Уолпола за указание на этот метод.
источник
current_path.should ==
работает сейчас (хотя мне нужно добавить косую черту в виде строки). Я заранее благодарю вас за код, который мне, вероятно, понадобится.URI.parse(current_url).request_uri
является более кратким. Смотрите ответ @Lasse Bunk.ignore_query: true
вместоonly_path: true
Я заменил метод _path на _url, чтобы сравнить полные URL с параметрами.
источник
current_path
в более новых версиях Capybara и сопоставить его сpeople_path(...)
Просто обновляю этот вопрос для современности. В настоящее время рекомендуется проверять значения current_paths при использовании Capybara 2.5+ с использованием средства сравнения current_path, которое будет использовать поведение ожидания Capybaras для проверки пути. Если вы хотите проверить против request_uri (путь и строка запроса)
Если требуется только часть пути (игнорирование строки запроса)
Если вы хотите, чтобы соответствовать полный URL
средство сравнения возьмет строку, которая сравнивается с ==, или регулярное выражение для сопоставления
источник
should
синтаксис. Вы должны стремиться использоватьexpect().to
в своих спецификациях в будущем.only_path: true
сейчасignore_query: true
Я знаю, что ответ был выбран, но я просто хотел дать альтернативное решение. Так:
Чтобы получить путь и строку запроса, как
request.fullpath
в Rails, вы можете сделать:Вы также можете сделать вспомогательный метод в своем тестовом классе (например
ActionDispatch::IntegrationTest
) следующим образом (что я и сделал):Надеюсь это поможет.
источник
РЕДАКТИРОВАТЬ: как упоминалось Tinynumberes, это не работает для URL с номером порта. Хранить его здесь на случай, если у кого-то еще будет такая же блестящая идея.
golfs точно также (35 символов)
URI.parse(current_url).request_uri
, но потенциально быстрее, потому что нет явного анализа URI.Я сделал запрос на добавление, чтобы добавить это к Капибаре по адресу: https://github.com/jnicklas/capybara/pull/1405
источник
current_url
может содержать номер порта. Например , учитываяcurrent_url
изhttp://foo.com:8888/some/path
,current_url[current_host.size..-1]
будет равно:8888/some/path
. Кроме того, за кулисамиcurrent_host
действует та жеURI.parse
логика, которую @nzifnab рекомендовал в принятом ответе.