这个例子有点做作,但很好地解释了用例。
let( :number_of_users ){ User.count }
it 'counts users' do
User.create
number_of_users.should == 1
User.create
number_of_users.should == 2
end
此测试失败,因为number_of_users
只评估一次,并且变得陈旧。有没有办法在每次调用时重新评估它?
您可以只定义一个常规方法:
def number_of_users
User.count
end
it 'counts users' do
User.create
number_of_users.should == 1
User.create
number_of_users.should == 2
end
有关更多详细信息,请参阅此博客文章,包括如何将辅助方法存储在单独的模块中。
如何编写这样的测试:
it "counts user" do
expect {
User.create
}.to change(User, :count).by(1)
end
简短回答“不”(AFAIK)
如果你的方法或对象有一个有用的容器,你可能会通过为它分配一个变量来获得一些东西。
比你的例子更做作:
let( :user_module ){ User }
it 'counts users' do
User.create
user_module.count.should == 1
User.create
user_module.count.should == 2
end
你也可以使用过程
let( :number_of_users ){ proc { User.count } }
it 'counts users' do
User.create
number_of_users.call.should == 1
User.create
number_of_users.call.should == 2
end