jak*_*ake 39 shoulda rspec-rails ruby-on-rails-3
我的ActiveRecord中有以下验证.
validates :active, :inclusion => {:in => ['Y', 'N']}
Run Code Online (Sandbox Code Playgroud)
我使用以下来测试我的模型验证.
should_not allow_value('A').for(:active)
should allow_value('Y').for(:active)
should allow_value('N').for(:active)
Run Code Online (Sandbox Code Playgroud)
是否有更清洁,更通过测试方式?我目前正在使用RSpec2和shoulda匹配器.
编辑
经过一些环顾四周我才发现,这可能是一种'好'的测试方式,如果没有为此提供任何东西,任何需要它的人都可以为它编写自己的自定义匹配器.(并可能将其贡献给项目) .可能有趣的讨论的一些链接:
Nat*_*ong 63
在最新版本shoulda-matchers
(至少从v2.7.0开始)中,您可以:
expect(subject).to validate_inclusion_of(:active).in_array(%w[Y N])
Run Code Online (Sandbox Code Playgroud)
这测试验证中可接受值的数组与此规范完全匹配.
在早期版本中,> = v1.4,shoulda_matchers
支持以下语法:
it {should ensure_inclusion_of(:active).in_array(%w[Y N]) }
Run Code Online (Sandbox Code Playgroud)
nmo*_*ott 25
如果您要测试的元素多于布尔Y/N,那么您也可以尝试.
it "should allow valid values" do
%w(item1 item2 item3 item4).each do |v|
should allow_value(v).for(:field)
end
end
it { should_not allow_value("other").for(:role) }
Run Code Online (Sandbox Code Playgroud)
您还可以%w()
使用模型中定义的常量替换它,以便测试只允许常量值.
CONSTANT = %w[item1 item2 item3 item4]
validates :field, :inclusion => CONSTANT
Run Code Online (Sandbox Code Playgroud)
然后测试:
it "should allow valid values" do
Model::CONSTANT.each do |v|
should allow_value(v).for(:field)
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19617 次 |
最近记录: |