我正在尝试重构一些 RSpec/Rails 测试,以便它们将尽可能少的对象保留到数据库中,但是在试图弄清楚如何重写测试时遇到了麻烦,如下所示:
describe User do
context "record creation" do
before(:each) { @user = User.new(user_atts) }
it "should generate a confirmation_token" do
# Generated as the result of a callback
@user.save!
expect(@user.confirmation_token).to be_present
end
it "should set the confirmed_at attribute to nil" do
# Cleared as the result of a callback
@user.save!
expect(@user.confirmed_at).to be_nil
end
it "should call the send_confirmation_instructions method" do
@user.should_receive(:send_confirmation_instructions) {}
@user.save!
end
end
def user_atts
# return attributes hash
end
end
这是一个非常简单的示例,但在我的规范中有很多类似的实例,并且在大多数情况下,它们都将记录保存到数据库中。我很想利用 RSpeclet
和subject
助手,但我不完全确定这些甚至会在这里有所帮助。
我一直在使用FactoryGirl,并认为它的build_stubbed
策略可能会加快我的规范,但我找不到很多可以帮助限制实际记录创建的实例(或者我可能不知道如何使用)。
我假设在某些情况下测试需要创建记录,但上面的示例几乎不像其中之一。我什至应该尝试重构它还是编写这些测试更好?任何帮助将不胜感激。