我正在使用rails mintiest框架来编写测试用例。我想测试rails activerecord sql查询。为了测试activerecord查询,我使用的是rails fixture,它提供了用于测试的样本数据。
最初,我的fixture文件users.yml中只有两条记录,如下所示:
user1:
name: 'xxx'
user2:
name: 'xyz'
现在有了上述数据,我编写了一个测试用例,计算数据库中的记录数等于2,并且工作正常。但是当我在其他测试用例场景所需的users.yml文件中添加一个用户时,问题就出现了,计数变为3,测试用例失败。
我想知道,有没有办法为特定的测试用例创建灯具,以便每个测试用例都有自己的灯具数据?
如果答案是肯定的,那么即使我在夹具文件中添加额外的用户记录,我的计算数据库中记录数量的测试用例也不会失败。
答案 0 :(得分:1)
有几种方法可以解决这个问题 - 有些人可能会建议根本不使用灯具,这可能值得在将来进行研究。但是,最直接的解决方案是:不要测试数据库的特定状态。如果您将测试设置为:
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