即使一切正常,Rspec测试也会失败

时间:2019-10-24 19:43:56

标签: ruby-on-rails rspec ruby-on-rails-5

我正在使用RSpec来测试我的Rails5应用程序,并且在删除或更新对象方面遇到问题。也就是说,该应用程序正常运行,但是如果我测试其中一些功能,则测试将失败。

测试1

DRF serializer

如果我以管理员身份在浏览器中进行浏览,则可以更新属性。

测试2

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

再次,如果我手动执行此操作,并使用byebug或rails控制台检查所有内容,则该用户不再拥有 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 。因此,这两个是系统规格,我想知道是否误解了如何正确测试。由于我阅读了系统规格,因此我通过模拟用户行为来测试整个系统,因此我还可以检查控制器操作是否正确执行。

但是在我的模型规格中,它也不应该像下面那样工作:

测试3

friend_request

我认为这将是对模型的适当测试,因为它应该由于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 而起作用。

现在,我想知道我的代码中是否存在我似乎无法弄清的错误,或者我的大脑中是否存在错误的概念。

任何帮助和澄清将不胜感激!谢谢。

1 个答案:

答案 0 :(得分:1)

您需要通过user重新加载user.reload.friend_requests对象。测试中的内存对象尚未进行任何更新处理。