Rails 测试用例:除了全局夹具之外,还有什么方法可以为特定测试用例创建夹具吗?
Rails Test Case: Rather than global fixtures is there any way to create fixtures for specific test case?
我正在使用 rails mintiest 框架来编写测试用例。我想测试 rails activerecord sql 查询。为了测试 activerecord 查询,我使用了 rails 为测试提供示例数据的装置。
最初,我的夹具文件中只有两条记录users.yml,如下所示:
user1:
name: 'xxx'
user2:
name: 'xyz'
现在有了以上数据,我编写了一个测试用例,计算数据库中的记录数等于 2,并且工作正常。但是当我在其他测试用例场景所需的 users.yml 文件中再添加一个用户时,问题就出现了,计数变为 3,测试用例失败。
我想知道,有什么方法可以为特定的测试用例创建夹具,让每个测试用例都有自己的夹具数据吗?
如果答案是肯定的,那么即使我在夹具文件中添加额外的用户记录,我计算数据库中记录数的测试用例也不会失败。
有几种方法可以解决这个问题 - 有些人可能会建议根本不使用固定装置,这可能值得在未来研究。然而,最直接的解决方案是:永远不要测试数据库的特定状态。如果您将测试设置为:
it 'should add one' do
User.create(username: 'username')
assert_equal 2, User.count
end
改为简单地计算用户数增加了一个:
it 'should add one' do
count = User.count
User.create(username: 'username')
assert_equal count + 1, User.count
end
事实上,有一个专门针对这个用例的自定义断言:
http://apidock.com/rails/ActiveSupport/Testing/Assertions/assert_difference
it 'should add one' do
assert_difference("User.count", 1) do
User.create(username: 'username')
end
end
我正在使用 rails mintiest 框架来编写测试用例。我想测试 rails activerecord sql 查询。为了测试 activerecord 查询,我使用了 rails 为测试提供示例数据的装置。
最初,我的夹具文件中只有两条记录users.yml,如下所示:
user1:
name: 'xxx'
user2:
name: 'xyz'
现在有了以上数据,我编写了一个测试用例,计算数据库中的记录数等于 2,并且工作正常。但是当我在其他测试用例场景所需的 users.yml 文件中再添加一个用户时,问题就出现了,计数变为 3,测试用例失败。
我想知道,有什么方法可以为特定的测试用例创建夹具,让每个测试用例都有自己的夹具数据吗?
如果答案是肯定的,那么即使我在夹具文件中添加额外的用户记录,我计算数据库中记录数的测试用例也不会失败。
有几种方法可以解决这个问题 - 有些人可能会建议根本不使用固定装置,这可能值得在未来研究。然而,最直接的解决方案是:永远不要测试数据库的特定状态。如果您将测试设置为:
it 'should add one' do
User.create(username: 'username')
assert_equal 2, User.count
end
改为简单地计算用户数增加了一个:
it 'should add one' do
count = User.count
User.create(username: 'username')
assert_equal count + 1, User.count
end
事实上,有一个专门针对这个用例的自定义断言:
http://apidock.com/rails/ActiveSupport/Testing/Assertions/assert_difference
it 'should add one' do
assert_difference("User.count", 1) do
User.create(username: 'username')
end
end