从source code来看,默认情况下这似乎是不可能的。这给您留下了几个选择:
1. 每次创建模型存根时指定created_at 值:
m = stub_model(MyModel, :created_at => Time.now)
2. 创建您自己的辅助方法,在初始化存根后设置created_at 属性:
module Helpers
def stub_model_with_timestamp(model_class, stubs={})
stub_model(model_class, { :created_at => Time.now }.merge(stubs))
end
end
然后只需将模块包含在 spec_helper.rb 中,以便它适用于所有规格:
RSpec.configure do |config|
include Helpers
...
end
3. 如果您真的想按原样使用stub_method,您可以通过猴子补丁 rspec-rails 重新打开模块并为原方法:
module RSpec::Rails::Mocks
def stub_model_with_timestamp(model_class, stubs={})
stub_model_without_timestamp(model_class, { :created_at => Time.now }.merge(stubs))
end
alias_method_chain :stub_model, :timestamp
end
把它放在spec/support/的文件中,它会自动加载,所以当你存根模型时,它会自动设置created_at时间戳。
最后一点,我认为这是其他人可能也想使用的有用功能,因此您可以考虑实际向rspec-rails 发出拉取请求,将默认设置添加为配置选项。 (我想如果你这样做,你可能还想设置updated_at,以确保完整性。)
希望有帮助!