如何正确评估页面是否包含水豚的某些内容?
How to properly evaluate if a page has certain content with capybara?
我目前正在尝试评估在我的网站上使用 Capybara 单击“支付”按钮的结果,如果表单中的参数无效。似乎测试一切正常,正确填写所有字段,单击“支付”按钮,但它不是“看到”我的 .alert 选择器,文本为“电子邮件不能为空,电子邮件无效” .我不确定为什么它没有“看到”这个。就好像它根本不存在一样。我的控制器正在设置 flash,然后使用 flash 方法呈现页面。 Capybara 是否试图评估当前页面是否有 flash?我当前测试的代码如下。任何帮助表示赞赏。我一直在浏览文档,但一定遗漏了一些关于 expect() 的内容。
feature "order features", type: :feature do
feature "making a new order" do
before(:each) do
visit "/orders/new"
end
scenario "with invalid params", js: true do
fill_in "Your Name *", with: "Benedict Cumberbatch"
select("CAM Academy", from: 'order_school_name')
fill_in "Street Address *", with: "221b Baker St."
fill_in "City", with: "Vancouver"
select("WA", from: 'order_state')
fill_in "Zip code *", with: "98671"
fill_in "groupNumberBooks", with: 1
fill_stripe_elements(card: '4242 4242 4242 4242', selector: "#card-element-1 > div > iframe")
click_button "Pay"
expect(page).to have_selector('.alert', text: "Email can't be blank, Email is invalid")
end
end
end
附带说明一下,我也尝试过 expect(page).to have_content("Email can't be blank")。这也行不通。我在这里错过了什么?
编辑:我收到的确切错误消息是:
Failures:
1) order features making a new order with invalid params
Failure/Error: expect(page).to have_selector('alert', text: "Email can't be blank, Email is invalid")
expected to find css "alert" but there were no matches
# ./spec/features/order_features_spec.rb:19:in `block (3 levels) in <top (required)>'
我已转到指定路径并手动填写了这些字段,并评估了在调用渲染和设置 flash[:alert] 时页面上显示的内容。
听起来您的测试可能命中了真正的条带(沙盒实例),这意味着失败将比您的大多数测试花费更长的时间。这意味着 Capybara.default_max_wait_time 的长度不足以让页面实际更新以显示错误消息。您可以增加 Capybara.default_max_wait_time
或者您可以告诉个人期望使用 wait
参数
允许更长的比赛等待时间
expect(page).to have_selector('.alert', text: "Email can't be blank, Email is invalid", wait: 20)
这将等待最多 20 秒,以便预期的元素出现在页面上
我目前正在尝试评估在我的网站上使用 Capybara 单击“支付”按钮的结果,如果表单中的参数无效。似乎测试一切正常,正确填写所有字段,单击“支付”按钮,但它不是“看到”我的 .alert 选择器,文本为“电子邮件不能为空,电子邮件无效” .我不确定为什么它没有“看到”这个。就好像它根本不存在一样。我的控制器正在设置 flash,然后使用 flash 方法呈现页面。 Capybara 是否试图评估当前页面是否有 flash?我当前测试的代码如下。任何帮助表示赞赏。我一直在浏览文档,但一定遗漏了一些关于 expect() 的内容。
feature "order features", type: :feature do
feature "making a new order" do
before(:each) do
visit "/orders/new"
end
scenario "with invalid params", js: true do
fill_in "Your Name *", with: "Benedict Cumberbatch"
select("CAM Academy", from: 'order_school_name')
fill_in "Street Address *", with: "221b Baker St."
fill_in "City", with: "Vancouver"
select("WA", from: 'order_state')
fill_in "Zip code *", with: "98671"
fill_in "groupNumberBooks", with: 1
fill_stripe_elements(card: '4242 4242 4242 4242', selector: "#card-element-1 > div > iframe")
click_button "Pay"
expect(page).to have_selector('.alert', text: "Email can't be blank, Email is invalid")
end
end
end
附带说明一下,我也尝试过 expect(page).to have_content("Email can't be blank")。这也行不通。我在这里错过了什么?
编辑:我收到的确切错误消息是:
Failures:
1) order features making a new order with invalid params
Failure/Error: expect(page).to have_selector('alert', text: "Email can't be blank, Email is invalid")
expected to find css "alert" but there were no matches
# ./spec/features/order_features_spec.rb:19:in `block (3 levels) in <top (required)>'
我已转到指定路径并手动填写了这些字段,并评估了在调用渲染和设置 flash[:alert] 时页面上显示的内容。
听起来您的测试可能命中了真正的条带(沙盒实例),这意味着失败将比您的大多数测试花费更长的时间。这意味着 Capybara.default_max_wait_time 的长度不足以让页面实际更新以显示错误消息。您可以增加 Capybara.default_max_wait_time
或者您可以告诉个人期望使用 wait
参数
expect(page).to have_selector('.alert', text: "Email can't be blank, Email is invalid", wait: 20)
这将等待最多 20 秒,以便预期的元素出现在页面上