问题描述
我目前正在尝试评估表单中包含无效参数的情况下,使用Capybara单击我的网站上的“付款”按钮的结果。似乎测试正确执行了所有操作,正确填写了所有字段,然后单击“付款”按钮,但是它并没有“看到”我的.alert选择器,其文本为“电子邮件不能为空,电子邮件无效” 。我不确定为什么它没有“看到”这一点。好像它甚至不在那里。我的控制器正在设置Flash,然后使用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(“电子邮件不能为空”)。这也不起作用。我在这里想念什么?
编辑:我得到的确切错误消息是:
Failures:
1) order features making a new order with invalid params
Failure/Error: expect(page).to have_selector('alert',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秒,预期元素就会出现在页面上