如何正确评估页面是否包含水豚的某些内容?

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 秒,以便预期的元素出现在页面上