Rspec: тестирование ответа модели области - PullRequest
0 голосов
/ 10 мая 2018

Я пишу довольно простой тест для области действия модели:

describe "scope tests" do

  let(:account1) { create(:account, last_seen: Date.today)}
  let(:account2) { create(:account, last_seen: Date.today - 4.days)}
  let(:account3) { create(:account, last_seen: Date.today - 10.days)}
  let(:d) { Date.today}
  let(:seen_between) { Account.seen_between(d - 14.days, d - 2.days) }

  it "response to seen_between" do
    expect(seen_between).to eq([account3, account2])
    expect(seen_between).to_not include(account1)
  end
end

Но я получаю очень подробную ошибку:

Failure/Error: expect(Account.all).to eq([account3, account2])

       expected: [#<Account id: 2, date_of_birth: nil, description: nil, active: true, created_at: "2018-05-10 12:05:4..._lead_id: nil, account_category_id: nil, psychiatrisch: nil, oggz: nil, problem: nil, actions: nil>]
            got: #<ActiveRecord::Relation [#<Account id: 3, date_of_birth: nil, description: nil, active: true, create...lead_id: nil, account_category_id: nil, psychiatrisch: nil, oggz: nil, problem: nil, actions: nil>]>

Кроме того, когда я изменяюПорядок утверждения [account2, account3] все еще не работает.Как правильно пройти этот тест (при условии, что область действительно возвращает правильные записи, которые она уже делает)

Я также пытался использовать inlcudes (), которая, конечно, работает, но не работаетпроверьте правильность порядка записей.

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Попробуйте использовать let!, #to_a и match_array:

let(:today) { Date.today }

let!(:account1) { create(:account, last_seen: today) }
let!(:account2) { create(:account, last_seen: today - 4.days) }
let!(:account3) { create(:account, last_seen: today - 10.days) }

subject { Account.seen_between(today - 14.days, today - 2.days).to_a }

it { is_expected.to match_array [account2, account3] }

PS С match_array вам не нужны дополнительные expect(...).not_to include.

0 голосов
/ 10 мая 2018

Вы получаете отношение активной записи, но сравниваете его с массивом.

Просто преобразуйте отношение активной записи в массив.

  it "response to seen_between" do
    expect(seen_between.to_a).to eq([account3, account2])
    expect(seen_between.to_a).to_not include(account1)
  end

Если вам не важен порядок записи ...

  it "response to seen_between" do
    expect(seen_between.to_a).to match_array([account3, account2])
    expect(seen_between.to_a).to_not include(account1)
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...