这是我要测试的模型的架构:
create_table "retreats", force: :cascade do |t|
t.string "title"
t.string "tagline"
t.string "type_of"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "description"
t.string "schedule"
t.boolean "available", default: true
end
这是 Retreat 模型:
class Retreat < ApplicationRecord
TYPES_OF_RETREATS = ['individual', 'group']
validates :title, presence: true
validates :type_of, presence: true, inclusion: {in: TYPES_OF_RETREATS,
message: "%{value} is not a valid type."}
has_many :testimonials, dependent: :destroy
has_many :images, dependent: :destroy
has_and_belongs_to_many :dates, class_name: "RetreatDate", foreign_key:
'retreat_id', association_foreign_key: 'retreat_date_id'
end
这些是我写的测试用例:
test "retreat should not save without a title" do
retreat = retreats(:no_title)
assert_not retreat.save, "Saved a retreat without a title"
end
test "retreat should not save without a type" do
retreat = retreats(:no_type)
assert_not retreat.save, "Saved a retreat without a type"
end
test "retreat can have a tagline, description, schedule and available" do
retreat = retreats(:all_attributes)
assert retreat.save, "Retreat failed to save"
end
test "retreat type should be from the provided list" do
retreat = retreats(:invalid_type)
assert_not retreat.save, "Some other retreat got saved. It shouldn't
have gotten saved."
end
test "retreat can have many testimonials" do
retreat = retreats(:one)
retreat.testimonials << Testimonial.new(statement: 'this is my
testimonial', participant_name: 'abc')
assert retreat.save, "Retreat did not save with the testimonials."
end
test "retreat can have many dates" do
retreat = retreats(:one)
retreat.dates.create({date: '02-08-2012'})
retreat.dates.create({date: '02-08-2013'})
assert retreat.save, "Retreat with multiple dates is not saving"
assert_equal(2, retreat.dates.length, "Retreat isn't saving multiple
dates.")
end
我正在寻找有关我应该为哪种测试用例编写测试的建议。我觉得我的一些测试用例是不必要的。就像用于验证的测试用例是有意义的,但是测试我是否可以添加多个推荐让我感到不舒服。
我可以像这样重写前两个测试用例:
test "retreat title and type_of must not be empty" do
retreat = Retreat.new
assert retreat.invalid?
assert retreat.errors[:title].any?, "Title must exist"
assert retreat.errors[:type_of].any?, "Type must exist"
end
编写单元测试的最佳实践是什么?我怎样才能编写更好的单元测试?
谢谢:)
最佳答案
http://www.betterspecs.org/帮助我开始测试。
我会说坚持测试您的业务规则。所以不要只测试保存或关系,因为它们有效并且是 Rails 框架的一部分。但是,请执行以下测试规则:“它可以有 2 个日期”、“我希望能够同时创建静修和推荐”
关于ruby-on-rails - 我应该写这些测试用例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44716917/