Как проверить несколько вещей после лямбды в rspec? - PullRequest
5 голосов
/ 21 марта 2011

Итак, у меня есть что-то подобное в Rails с rspec:

it "should create a new user" do
  lambda do
    post :create, @attr
  end.should change(User,:count)
end

Но пост: create, @attr создает и пользователя, и компанию, так как мне "связать" цепочку изменить звонки, чтобы я мог проверить оба?Я ищу что-то вроде end.should change(User,:count) && change(Company,:count)

Ответы [ 3 ]

8 голосов
/ 21 марта 2011

Я бы сказал, что вы пытаетесь утверждать многое в одном тесте, и он не соответствует названию теста.Рассмотрим это вместо этого:

it "should create a new user" do
  lambda do
    post :create, @attr
  end.should change(User,:count)
end

it "should create a new company" do
  lambda do
    post :create, @attr
  end.should change(Company,:count)
end

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

expect {
  post :create, @attr
}.to change(Company, :count)
1 голос
/ 08 сентября 2014

Проработав пару лет разработчиком, я нашел довольно чистое решение для тестирования нескольких значений при необходимости:

expect{ execute }.to change{ [spe1.reload.trashed?, spe2.reload.trashed?] }.from([true, true]).to([false, false])

Но когда нам нужно протестировать создание нескольких записей:

[User, Company].each do |klass|
  it "creates one #{klass}" do
    expect{ post :create, valid_args }.to change(klass, :count).by(1)
  end
end
0 голосов
/ 08 сентября 2014

@ idlefingers - re:

"Я бы сказал, что вы пытаетесь многого заявить в одном тесте, и это не соответствует названию теста "

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

Чтобы обойти это, вы можете использовать этот трюк:

def user_and_company_count
  User.count + Company.count
end

it "can assert both counts" do
  expect { post :create, @attr }.to change(self, :article_an_activity_count).by(2)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...