Я использую RSpec для тестирования моего приложения на Rails5, и у меня возникают проблемы с удалением или обновлением объектов. То есть приложение работает правильно, но если я тестирую некоторые из этих функций, тесты не пройдены.
Тест 1
let!(:user) { create(:user) }
let!(:admin) { create(:admin) }
let!(:new_name) { 'new name' }
it 'changes user name' do
visit(user_path(user))
click_on('Edit')
expect(current_path).to eq(edit_user_as_admin_path(user))
fill_in('Name', with: new_name)
click_on('Update')
expect(current_path).to eq(user_path(user))
expect(user.name).to eq(new_name)
end
Если я проверю его в своем браузерекак администратор я могу обновлять атрибуты просто отлично.
Тест 2
let!(:user){create(:user)}
let!(:friend){create(:user)}
before(:each){sign_in friend
visit(user_path(user))
click_on('Add Friend')
sign_in user
}
it 'is accepted' do
visit(user_path(user))
click_on('Accept')
expect(user.friend_requests).to be_empty
end
Здесь снова, если я делаю это вручную и проверяю все с помощью byebug или rails consoleУ пользователя больше нет friend_request
. Так что эти две спецификации системы, и мне интересно, правильно ли поняли, как правильно тестировать. Так как я прочитал системные спецификации и протестировал всю систему, я подумал, что, имитируя поведение пользователя, я также могу проверить, правильно ли выполняются действия контроллера.
Но также и в моих модельных спецификациях он работает не так, как должно быть:
Тест 3
let!(:user){create(:user)}
let!(:post) {create(:post)}
it 'is deleted if user is deleted' do
user.posts << post
expect do
user.destroy
end.to change(user.posts,:count).by(-1)
end
Я думал, что это будет подходящий тест для модели, поскольку он должен работать из-за dependent: :destroy
.
СейчасИнтересно, есть ли в моем коде ошибки, которые я просто не могу понять, или у меня неправильная концепция в моем мозгу.
Буду признателен за любую помощь и разъяснение! Спасибо.