我正在从事 Ruby on Rails 项目并使用 Minitest 实践测试驱动开发 (TDD)。
对于用户身份验证(使用 Devise),我编写了一个测试来检查用户是否无法在没有电子邮件的情况下注册。但是,我还有其他必需属性,例如 first_name、last_name、username 和 password。
这让我想到:
- 我应该为每个缺失的属性编写单独的测试吗?
- 或者测试一个缺失的属性是否足够,因为Rails已经在模型级别强制验证:presence,true?
另一位开发人员建议,如果我对多个属性进行存在性验证,我也应该为每个属性编写一个测试。他们的理由是,每个实现的功能都应该进行测试。他们还建议使用循环方法来避免冗余代码,而不是编写多个几乎相同的测试。
我知道,从 TDD 的角度来看,我先编写测试,然后编写代码使其通过,对缺失属性进行循环测试会迫使我为每个字段实施存在性验证。这确保我不会意外忘记任何一个字段。然而,从更务实的角度来看,当 Rails 已经在模型级别强制执行存在性验证时,我仍然怀疑这种级别的测试是否有必要。
很想听听这里的最佳实践——经验丰富的 Rails 开发人员如何处理这个问题?
这是我目前进行的测试:
test "user cannot sign up without email" do
post user_registration_path, params: {
user: {
first_name: "Test",
last_name: "User",
username: "testuser",
email: "",
password: "password123",
password_confirmation: "password123",
}
}
assert_response :unprocessable_entity
end