ruby-on-rails - 我应该写这些测试用例吗?

标签 ruby-on-rails unit-testing testing

这是我要测试的模型的架构:

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/

相关文章:

ruby-on-rails - Rails has_many belongs_to 关系

html - 下推内容的透明导航菜单

javascript - rails : JS Controller Being Called Twice for Some Reason

c++ - 使用 gtest 1.6 : how to check what is printed out? 进行单元测试

unit-testing - MVC3 中的单元测试 Controller session 变量

vb.net - 使用 Sandbox 和 VB.NET 对 PayPal 进行负面测试 - 如何模拟不同的场景?

bash - 使用 `[[` 或 `[` 或组合来测试 bash 脚本?

ruby-on-rails - 503 使用 Carrierwave 上传到 S3 时速度变慢

c++ - 从类 T 获取函数名 (__func__) 和指向成员函数 void(T::*pmf)() 的指针

reactjs - 使用 URL 对象进行 Jest 测试