使用nil id重新分配用户

时间:2014-05-07 23:56:20

标签: ruby-on-rails ruby rspec factory-bot

今天我遇到了令人惊讶的Rails / Rspec / FactoryGirl(?)怪癖。我已经找到了解决办法,但我一开始就对问题发生的原因感兴趣。

我的例子:

let(:old_user) { build(:user) }
let(:new_user) { create(:user) }
let(:post) { build(:post, user: old_user) }

it 'sets the new user' do
  post.user_id = new_user.id
  post.save
  post.reload
  post.user.should == new_user
end

此测试失败。未正确分配用户,在测试结束时post.user仍为old_user。 (这也是一个完全没用的测试。)

有两种方法可以让测试通过。一个是create old_user,因此在尝试重新分配之前设置post.user_id。另一种方法是将post.user_id = new_user.id替换为post.user = User.find(new_user.id)。但我好奇......

当测试失败时,原始代码在幕后发生了什么?

编辑:按要求添加工厂。

FactoryGirl.define do
  factory :user do
    # We actually use Faker, but for this purpose I gave strings
    name 'Test User'
    email 'example@example.com'
    password 'changeme'
    password_confirmation 'changeme'
  end
end

# The Post class has `belongs_to :user`
FactoryGirl.define do
  factory :post do
    body 'I am a post'
  end
end

0 个答案:

没有答案