我有几个模型,在这个模型中我有属性,我不想空白/空。
我想使用RSpec和Factory Girl对这些限制进行大量测试。
但是我最终得到了代码重复:
user_spec:
it 'is invalid if blank' do
expect {
FactoryGirl.create(:user, nickname => '')
}.to raise_error(ActiveRecord::RecordInvalid)
end
message_spec:
it 'is invalid if blank' do
expect {
FactoryGirl.create(:message, :re => '')
}.to raise_error(ActiveRecord::RecordInvalid)
end
我该如何考虑它?
答案 0 :(得分:0)
RSpec提供了几种方法,例如Shared Examples。
<强> 1。在[RAILS_APP_ROOT]/support/
根据您的示例,您可以将此文件命名为not_blank_attribute.rb
。然后,您只需移动重复的代码并进行调整以使其可配置:
RSpec.shared_examples 'a mandatory attribute' do |model, attribute|
it 'should not be empty' do
expect {
FactoryGirl.create(model, attribute => '')
}.to raise_error(ActiveRecord::RecordInvalid)
end
end
<强> 2。在您的规范中使用it_behaves_like
功能
此函数将调用共享示例。
RSpec.describe User, '#nickname' do
it_behaves_like 'a mandatory attribute', :User, :nickname
end
最后,它输出:
User#nickname
behaves like a mandatory attribute
should not be empty