功能规范在本地通过但在 Circle 上失败 CI
Feature spec pass locally but fail on Circle CI
我有我的 ActiveAdmin 视图的功能规范。它适用于我的本地机器。但是当 运行 在 CircleCi 中时它失败了
undefined method `text' for nil:NilClass
规格
it 'uses the update_at date when prepaid_invoice' do
travel_to(5.days.ago) { create_prepayment }
travel_to(3.days.ago) do
visit '/admin/payments'
expect(page).not_to have_css('.col.col-created > div')
amount = all('.col-amount').last
expect(amount.text).to eq(',000.00') # failing here
all
的行为会有所不同,具体取决于您使用的是当前版本的 Capybara 还是较早的 2.x 版本。在当前版本中,all
将最多等待 Capybara.default_max_wait_time
秒以等待任何匹配元素出现,如果 none 这样做,它将 return 一个空数组(实际上是像 Result 对象一样的数组,但足够接近)。在 2.x all
(默认情况下)没有等待匹配元素,如果没有元素匹配,它只会 return 空数组。无论哪种方式 - 你都没有找到任何匹配的元素,然后在一个空数组上调用 last
- 给你 nil
.
有几种解决方法。你可以告诉 all
你期望至少一个匹配元素(这将强制等待匹配元素 Capybara 2.x )
amount = all('.col-amount', minimum: 1).last
或者根据您要检查的内容,您可以将其合并为一个
expect(page).to have_css('.col-amount', exact_text:',000.00')
避免在 Capybara 元素上调用方法并在其上使用通用 RSpec 匹配器(出于测试稳定性原因,这是你不想做的事情,除非你没有其他选择) .这两种解决方案不会测试完全相同的东西,但可能足以满足您的需求。根据您的 HTML 的具体结构,可能还有更有效的解决方案。
如果您已经在使用最新版本的 Capybara,那么您的错误将表明您希望页面上出现的内容不是(也许您在错误页面上,等等)或者您没有Capybara.default_max_wait_time
为您正在测试的系统设置足够高的值。
我有我的 ActiveAdmin 视图的功能规范。它适用于我的本地机器。但是当 运行 在 CircleCi 中时它失败了
undefined method `text' for nil:NilClass
规格
it 'uses the update_at date when prepaid_invoice' do
travel_to(5.days.ago) { create_prepayment }
travel_to(3.days.ago) do
visit '/admin/payments'
expect(page).not_to have_css('.col.col-created > div')
amount = all('.col-amount').last
expect(amount.text).to eq(',000.00') # failing here
all
的行为会有所不同,具体取决于您使用的是当前版本的 Capybara 还是较早的 2.x 版本。在当前版本中,all
将最多等待 Capybara.default_max_wait_time
秒以等待任何匹配元素出现,如果 none 这样做,它将 return 一个空数组(实际上是像 Result 对象一样的数组,但足够接近)。在 2.x all
(默认情况下)没有等待匹配元素,如果没有元素匹配,它只会 return 空数组。无论哪种方式 - 你都没有找到任何匹配的元素,然后在一个空数组上调用 last
- 给你 nil
.
有几种解决方法。你可以告诉 all
你期望至少一个匹配元素(这将强制等待匹配元素 Capybara 2.x )
amount = all('.col-amount', minimum: 1).last
或者根据您要检查的内容,您可以将其合并为一个
expect(page).to have_css('.col-amount', exact_text:',000.00')
避免在 Capybara 元素上调用方法并在其上使用通用 RSpec 匹配器(出于测试稳定性原因,这是你不想做的事情,除非你没有其他选择) .这两种解决方案不会测试完全相同的东西,但可能足以满足您的需求。根据您的 HTML 的具体结构,可能还有更有效的解决方案。
如果您已经在使用最新版本的 Capybara,那么您的错误将表明您希望页面上出现的内容不是(也许您在错误页面上,等等)或者您没有Capybara.default_max_wait_time
为您正在测试的系统设置足够高的值。