我下面有水豚测试用例。
it "Testing login page with valid data" do
fill_in 'email', with: 'kiran@gmail.com'
expect(page).to have_selector("input[value='kiran@gmail.com']")#Checking values are inserted in email field
fill_in 'password', with: 'Kiran.6565'
expect(page).to have_selector("input[value='Kiran.6565']")#Checking values are inserted in password field
click_button('submit')
expect(current_path).to eql(patient_detail_path(4))
end
我正在检查登录页面,一旦电子邮件和密码字段匹配,它应该重定向到具有id字段值的patient_details_path。在上面的代码我指定的电子邮件和密码工作正常手动登录,但问题是在测试用例。预期结果:它应该重定向到另一个页面(patient_details_path),但它会再次重定向到主页(/)。
Failures:
1) Login Page Interface Test login page with valid data
Failure/Error: expect(current_path).to eql(patient_detail_path(4))
expected: "/patient_details/4"
got: "/"
(compared using eql?)
# ./spec/views/login_spec.rb:41:in `block (2 levels) in <top (required)>'
Finished in 1.08 seconds (files took 2.13 seconds to load)
14 examples, 1 failure
我尝试了stackoverflow的不同解决方案,但对我来说没什么用。以下是尝试过的不同解决方案。
#expect(current_path).to eql(patient_detail_path(4))
#expect(page).to have_current_path(patient_detail_path(4))
如果电子邮件和密码不匹配,则会引发错误并再次重定向到登录页面。在我的场景中,即使电子邮件和密码有效,也会抛出错误。如果我在我的测试用例中添加以下代码,它将通过测试用例。
#expect(page).to have_content "Invalid username/password combination"
任何人请帮助我,我是铁杆和水豚的红宝石。
答案 0 :(得分:1)
我猜测你尝试写的测试应该写成像
before :each do
@user = # Create the required user with whatever method you're using
@patient = # Create the required patient with whatever method you're using
end
it "Logs in with valid data" do
visit(patient_detail_path(@patient)) # gets redirected to the login path
fill_in 'email', with: 'kiran@gmail.com'
fill_in 'password', with: 'Kiran.6565'
click_button('submit')
expect(page).to have_current_path(patient_detail_path(@patient))
end
这是一般的猜测,并且可能不是100%正确(很难准确地猜测你正在试图做的一半测试缺失 - 前一块 - 来自你的问题)但是一般部分应该在那里。由于您没有登录,我猜测您实际上并未使用给定的电子邮件和密码创建有效用户,或者您没有创建ID为4的患者(你真的不应该依赖于在功能测试中测试特定的id号。
此外,在检查给定的路径/网址时,您应始终使用have_current_path
匹配器,因为它会阻止测试剥落,因为它不是视图测试,所以它不应该在{ {1}},更合适的是spec/views/login_spec.rb
。
答案 1 :(得分:0)
在我看来,在Rails有机会更新URL以反映新页面之前,驱动程序正在捕获URL。
执行导航更改后,在URL上断言很难,因为可能会出现竞争条件。我建议:
断言可以验证用户是否已成功登录的其他信息。 使用等待选项断言。
expect(page).to have_current_path(patient_detail_path(@patient), wait: 3)