如何测试数据库中的插入?

时间:2012-11-05 19:18:21

标签: ruby-on-rails-3 rspec

我有一个方法的rspec测试,如果不存在具有给定属性的记录,则插入或返回第一个记录。看起来像这样

context 'user doesn't exists' do
  subject { User.find_or_create(name: "Jonh", login: "john") }

  it { should be_an_instance_of(User) }
  //and here I want to test that new user was inserted into database...

end

但我无法弄清楚如何在此使用expect to change

1 个答案:

答案 0 :(得分:1)

我通常测试的方法是查找要更改的对象的数量:

it "creates a new user object" do
  expect {
    User.find_or_create(name: "John", login: "john")
  }.to change{User.count}.by(1)
end

不可否认,它与你开始使用的subject模式不太匹配,但当你测试某种方法导致系统状态发生变化时,这是一个必要的恶魔,而不是测试对象是否具有某些属性。