URL halaman adalah sesuatu seperti /people?search=name
ketika saya menggunakan current_path
metode capybara /people
hanya dikembalikan .
current_path.should == people_path(:search => 'name')
Tapi itu gagal dikatakan
expected: "/people?search=name"
got: "/people"
Bagaimana kita bisa melewatinya? Apakah ada cara untuk melakukan ini?
ruby-on-rails
ruby-on-rails-3
rspec
capybara
kriysna
sumber
sumber
"/people?search=name"
bukan jalan ."/people"
is a pathJawaban:
Saya telah memperbarui jawaban ini untuk mencerminkan konvensi modern di capybara. Saya pikir ini ideal karena ini adalah jawaban yang diterima, dan apa yang dirujuk oleh banyak orang ketika mencari solusi. Dengan itu, cara yang benar untuk memeriksa jalur saat ini adalah dengan menggunakan
has_current_path?
pencocokan yang disediakan oleh Capybara, seperti yang didokumentasikan di sini: Klik Di SiniContoh penggunaan:
Seperti yang dapat Anda lihat di dokumentasi, opsi lain tersedia. Jika halaman saat ini adalah
/people?search=name
tetapi Anda hanya peduli bahwa itu ada di/people
halaman terlepas dari param, Anda dapat mengirimonly_path
opsi:Selain itu, jika Anda ingin membandingkan seluruh URL:
Penghargaan untuk Tom Walpole karena menunjukkan metode ini.
sumber
current_path.should ==
berfungsi untuk saat ini (meskipun saya perlu menambahkan garis miring ke depan sebagai string). Saya berterima kasih sebelumnya untuk kode yang mungkin akan saya butuhkan.URI.parse(current_url).request_uri
lebih ringkas. Lihat jawaban @Lasse Bunk.ignore_query: true
alih-alihonly_path: true
Saya mengganti metode _path dengan _url untuk mencapai membandingkan url lengkap dengan parameter.
sumber
current_path
Capybara dalam versi yang lebih baru dan mencocokkannya denganpeople_path(...)
Hanya memperbarui pertanyaan ini untuk zaman modern. Praktik terbaik saat ini untuk memeriksa current_paths saat menggunakan Capybara 2.5+ adalah dengan menggunakan pencocokan current_path, yang akan menggunakan perilaku menunggu Capybaras untuk memeriksa lintasan. Jika ingin memeriksa terhadap request_uri (jalur dan string kueri)
Jika hanya menginginkan bagian jalur (mengabaikan string kueri)
Jika ingin mencocokkan url lengkap
pencocokan akan mengambil string yang dibandingkan dengan == atau regex untuk dicocokkan
sumber
should
sintaksisnya. Anda harus berusaha untuk menggunakanexpect().to
spesifikasi Anda ke depan.only_path: true
sekarangignore_query: true
Saya tahu jawaban telah dipilih, tetapi saya hanya ingin memberikan solusi alternatif. Begitu:
Untuk mendapatkan path dan querystring, seperti
request.fullpath
di Rails, Anda dapat melakukan:Anda juga dapat melakukan metode pembantu di kelas ujian Anda (seperti
ActionDispatch::IntegrationTest
) seperti ini (yang saya lakukan):Semoga ini membantu.
sumber
EDIT: seperti yang disebutkan Tinynumberes, ini gagal untuk URL dengan nomor port. Menyimpannya di sini kalau-kalau ada orang lain yang memiliki ide cemerlang yang sama.
golf juga (35 karakter)
URI.parse(current_url).request_uri
, tetapi berpotensi lebih cepat karena tidak ada penguraian URI eksplisit.Saya telah membuat permintaan tarik untuk menambahkan ini ke Capybara di: https://github.com/jnicklas/capybara/pull/1405
sumber
current_url
mungkin berisi nomor port. Misalnya dibericurrent_url
darihttp://foo.com:8888/some/path
,current_url[current_host.size..-1]
akan sama:8888/some/path
. Selain itu, di balik layarcurrent_host
melakukanURI.parse
logika yang sama seperti yang direkomendasikan oleh @nzifnab dalam jawaban yang diterima.