在标准的Rails 4.0.2应用程序中使用如下模型:
应用程序/模型/歌曲
class Song < ...
# title (string)
# duration (integer)
# artist (string)
# ... imagine a lot more attributes
end
如何为所有属性的存在编写测试?这样做是否存在“轨道”方式,因为我的方法看起来非常笨拙?
到目前为止,我写道:
test "presence of attributes" do
required_attributes = Song.new.attributes.keys
required_attributes.each do |ra|
helper = songs(:one)[ra]
songs(:one)[ra] = nil
assert !songs(:one).save
songs(:one)[ra] = helper
assert songs(:one).save
end
end
答案 0 :(得分:1)
由于您对属性有要求,因此需要进行验证。
由于您将获得验证,因此测试验证就足够了。无需在一次测试中查看所有属性,这些属性将无法获得有意义的内容并将重复。
更好的方法是分别测试每个验证。像
class Song < ActiveRecord::Base
validate :title, presence: true
end
test "title must not be blank" do
song = Song.new(title: '')
assert song.invalid?
end
通常我不会测试Rails已经完成的那些非常基本的东西。我至少只会测试一些自定义的东西。无论如何,这取决于你的风格。
答案 1 :(得分:0)
您是否尝试过使用断言?
test "song attributes must not be empty" do
song = Song.new
assert song.invalid?
assert song.errors[:title].any?
assert song.errors[:duration].any?
end