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