Тесты Rspec не пройдены, хотя все работает нормально вручную - PullRequest
1 голос
/ 24 октября 2019

Я использую 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.

СейчасИнтересно, есть ли в моем коде ошибки, которые я просто не могу понять, или у меня неправильная концепция в моем мозгу.

Буду признателен за любую помощь и разъяснение! Спасибо.

1 Ответ

1 голос
/ 25 октября 2019

Вам необходимо перезагрузить объект user через user.reload.friend_requests. Объект в памяти в вашем тесте не был увлажнен никакими обновлениями.

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