Ruby on rails 3 如何在数据库中测试插入?

Ruby on rails 3 如何在数据库中测试插入?,ruby-on-rails-3,rspec,Ruby On Rails 3,Rspec,我对一个方法进行了rspec测试,如果一个具有给定属性的记录不存在,那么该方法将插入或返回第一条记录。看起来像这样 context "user doesn't exist" 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

我对一个方法进行了rspec测试,如果一个具有给定属性的记录不存在,那么该方法将插入或返回第一条记录。看起来像这样

context "user doesn't exist" 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

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

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

诚然,它与您开始使用的
主题
模式不太匹配,但是当您测试某个方法导致系统状态发生变化,而不是测试对象具有某些属性时,这是一个必要的缺点。

为什么要测试它?通常你应该只创建它?我想检查我的代码是否在应该的时候创建了新记录。为什么我不想测试一下呢?