我将我的模型rspecs重构为"作为DRY"尽可能导致像
这样的东西require 'spec_helper'
describe Model do
subject { build(:model) }
it { should be_valid }
it { should validate_presence_of(:description) }
it { should ensure_length_of(:description).is_at_least(3).is_at_most(255) }
it { should validate_presence_of(:position) }
it { should validate_numericality_of(:position).is_greater_than_or_equal_to(1) }
end
现在,每个文件都以
开头 subject { build(:model) }
it { should be_valid }
所以,你猜它,我想摆脱这两行...
有什么建议吗?
答案 0 :(得分:2)
it { should be_valid }
测试似乎只测试你的工厂。它对模型的功能并不重要。如果您想测试它们,请考虑将这些测试移至单factories_spec
测试。请参阅:https://github.com/thoughtbot/suspenders/blob/master/templates/factories_spec.rb
您在示例中使用的匹配器实际上并不需要使用FactoryGirl构建的模型。它们可以与隐式的默认主题(Model.new)一起使用。如果不是这种情况,我建议在测试中尽可能多地定义测试状态 - 也就是说,在it
块内。如果这会导致一些重复,那就这样吧。特别昂贵的重复可以提取到方法调用,这比subject
,let
和before
更好,因为它们没有魔力。作为开发人员在6个月后回到该项目,查看第75行的规范,您将确切知道设置是什么。
答案 1 :(得分:2)
您可以使用rspec shared examples:
shared_examples "a model" do
subject { build described_class }
it { should be_valid }
end
describe Foo do
it_behaves_like "a model"
end
describe Bar do
it_behaves_like "a model"
end