我有一个方法的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
。
答案 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
模式不太匹配,但当你测试某种方法导致系统状态发生变化时,这是一个必要的恶魔,而不是测试对象是否具有某些属性。