Тест фильтрации Rails rspec завершился неудачно с результатом 0 и неопределенным методом '[]' - PullRequest
0 голосов
/ 27 мая 2019

Я хочу проверить, правильно ли работает метод фильтрации для закрытых bank_offers.Если я изменяю статус в одной из ранее определенных спецификаций bank_offer на :expired, это работает хорошо, но я должен вложить новые bank_offer в эту context 'filtering'

not_working_specs

describe 'filtering' do
  subject(:call) do
    get endpoint, headers: authorized_headers(token: token), params: params
  end

  context "when status 'closed' passed " do
    let(:credit_5) { create :credit, company: company, details: details }
    let(:credit_process_5) { create :credit_process, credit: credit_5 }
    let(:suggestion_5) { create :bank_suggestion, bank: user.bank }
    let(:some_user) { create :bank_advisor, bank: user.bank }

    before do
      create :bank_offer,
             credit_process: credit_process_5,
             bank_suggestion: suggestion_5,
             bank_advisor: some_user,
             status: :expired,
             created_at: 5.days.ago,
             closed_at: 2.days.ago

      params[:filters][:general_status] = 'closed'
    end

    it 'returns only closed bank offers', :aggregate_failures do
      call
      data = json_response_body['data']
      expect(data.count).to eq(1)
      expect(data.first['id']).to eq(second.id.to_s)
    end
  end
end

В конце я получил 2 ошибки:

1.1) Ошибка / Ошибка: ожидаемо (data.count) .to eq (1)

        expected: 1
             got: 0

и второе, являющееся результатом первой ошибки:

 1.2) Failure/Error: expect(data.first['id']).to eq(second.id.to_s)

      NoMethodError:
        undefined method `[]' for nil:NilClass

Как я уже говорил, метод работает правильно, потому что если я изменю статус ранее определенного bank_offer на closed, у меня не будет ошибки.К сожалению, он мне нужен в 20 других IT тестах, поэтому я хочу вложить только один закрытый регистр.

Вот рабочие спецификации без вложенных банковских атрибутов:

describe 'filtering' do
  subject(:call) do
    get endpoint, headers: authorized_headers(token: token), params: params
  end

  context "when status 'closed' passed " do

    before do
      params[:filters][:general_status] = 'closed'
    end

    it 'returns only closed bank offers', :aggregate_failures do
      call
      data = json_response_body['data']
      expect(data.count).to eq(1)
      expect(data.first['id']).to eq(second.id.to_s)
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...