1

Railsで繰り返し単位のテストケースをドライアウトするための標準的な方法はありますか?たとえば、「name」属性を持つモデルがたくさんある場合、モデルごとに同じ種類の単体テストを実行したいと思います。モジュールを作成する必要があるのは漠然とわかりますが、再利用できますか?それは可能/正しいですか?

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
4

1 に答える 1

1

重複したコードをモジュールに移動し、実際のテストに含めます(クラスのように)。

于 2012-10-29T18:30:55.300 に答える