Спецификация функции передается локально, но не работает на Circle CI - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть характеристики для моего представления ActiveAdmin.Это работает на моей локальной машине.Но при запуске в CircleCi происходит сбой с

undefined method `text' for nil:NilClass

spec

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('$1,000.00') # failing here

1 Ответ

1 голос
/ 19 апреля 2019

all ведет себя по-разному в зависимости от того, используете ли вы текущую версию Capybara или более старую версию 2.x.В текущих версиях all будет ждать до Capybara.default_max_wait_time секунд, пока не появятся все совпадающие элементы, и если ничего не будет сделано, он вернет пустой массив (на самом деле массив, как объект Result, но достаточно близко).В 2.x all (по умолчанию) не ожидалось сопоставления элементов, он просто возвращал пустой массив, если ни один из элементов не соответствовал.В любом случае - вы не находите подходящих элементов, а затем вызываете last в пустом массиве - и вы получаете nil.

. Есть несколько способов обойти это.Вы можете сказать all, что вы ожидаете по крайней мере один соответствующий элемент (который затем заставит ждать соответствующих элементов Capybara 2.x)

amount = all('.col-amount', minimum: 1).last

или в зависимости от того, что именно вы проверяете, вы можете просто объединитьэто в один

expect(page).to have_css('.col-amount', exact_text:'$1,000.00')

, который уходит от вызова методов на элементах Capybara и использования общих сопоставителей RSpec для них (что вы не хотите делать из соображений стабильности теста, если у вас нетдругие опции).Эти два решения не проверяют одно и то же, но могут достаточно проверить то, что вы хотите.В зависимости от того, как именно ваш HTML структурирован, могут быть и более эффективные решения.

Если вы уже используете последнюю версию Capybara, то ваша ошибка будет означать, что то, что вы ожидаете увидеть на странице, отсутствует (возможно, вы находитесь на странице с ошибкой и т. Д.) Или вы неCapybara.default_max_wait_time установлен достаточно высоко для системы, на которой вы тестируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...