gpt4 book ai didi

ruby-on-rails-3 - 我们可以强制 rspec stub_model 将 created_at 列填充到时间 :now

转载 作者:行者123 更新时间:2023-12-04 06:55:01 26 4
gpt4 key购买 nike

我正在使用 twitter bootstrap gem 生成在索引页面中显示 created_at 列的 View 。与脚手架一起生成的 rspec 测试使用 stub_model 来测试索引 View 。这些测试失败,因为 created_at 列为零。

就像 stub_model 生成 dummy id 一样,它是否也可以将 created_at 列设置为 Time.now。可以通过配置完成吗?或者我们是否需要在创建 stub 时每次都指定它。

最佳答案

source code来看,默认情况下这似乎是不可能的。这给您留下了几个选择:

1. 每次创建模型 stub 时指定 created_at 值:

m = stub_model(MyModel, :created_at => Time.now)

2. 创建您自己的帮助方法,在初始化 stub 后设置 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/ 的文件中,它会自动加载,所以当你 stub 模型时,它会自动设置 created_at 时间戳。

作为最后一点,我认为这是其他人可能也想使用的有用功能,因此您可以考虑实际向 rspec-rails 发出拉取请求将默认设置添加为配置选项。 (我想如果你这样做了,你可能还想设置 updated_at 以确保完整性。)

希望有帮助!

关于ruby-on-rails-3 - 我们可以强制 rspec stub_model 将 created_at 列填充到时间 :now,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13583928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com