【问题标题】:Rails: Repeating unit test - DRY?Rails:重复单元测试 - DRY?
【发布时间】:2012-10-29 15:14:09
【问题描述】:

是否有任何标准做法来干燥 Rails 中的重复单元测试用例。例如我有许多具有“名称”属性的模型,我想对每个模型进行相同类型的单元测试。我隐约看到我需要创建的模块是重用的?这可能/正确吗?

创建 DRY 单元测试的任何指针/实践?

示例代码:我想对许多其他具有相同命名属性的模型进行相同类型的测试。

require 'test_helper'


# Factory class
class UserFactory

  # Creates a valid template user
  def self.create
    user = User.new do |u|
      u.name = "Test User #{rand}"
      u.notes = "test notes"
    end
    user
  end

end

class UserTest < ActiveSupport::TestCase
  # ------------
  # Init
  # ------------

  def setup
    @valid_usr = UserFactory.create
  end

  def teardown
    @valid_usr.destroy if @valid_usr.persisted?
    @valid_usr = nil
  end


  # ------------
  # Name
  # ------------

  test "should not have a dummy user object" do
    user = User.new
    assert !user.save
  end

  test "unique user name must be saved" do
    assert UserFactory.create.save!, "First entry must be saved"

    user = UserFactory.create
    user.name = "Different name"
    assert user.save!, "Unique user must be saved"
    user.destroy
  end

  test "non unique user names must not be saved" do
    user1 = UserFactory.create
    user2 = UserFactory.create
    user1.name = "Same User name"
    user2.name = "Same User name"

    assert user1.save!, "First entry must be saved"
    assert !user2.save, "Duplicate name should not be saved"

    user1.destroy
    user2.destroy
  end

  test "should not have user without a valid name" do
    # Invalid name
    @valid_usr.name = " "
    assert !@valid_usr.save
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 unit-testing tdd dry


    【解决方案1】:

    将重复的代码移动到模块中并将其包含在实际测试中(如在类中)。

    【讨论】:

    • 它工作正常!但是,我希望将模块参数化作为下一步。你有什么想法吗?
    • 我想你可以用 method_missing 破解一些东西,但我不会使用任何魔法进行测试。也许你最好使用 RSpec。
    • Rspec 是否允许以更好的方式编写 DRY 测试用例?任何示例/帖子都会很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多