Rails测试用例:有没有办法为特定测试用例创建灯具,而不是全局灯具?

时间:2017-01-04 15:09:45

标签: ruby-on-rails unit-testing minitest fixtures

我正在使用rails mintiest框架来编写测试用例。我想测试rails activerecord sql查询。为了测试activerecord查询,我使用的是rails fixture,它提供了用于测试的样本数据。

最初,我的fixture文件users.yml中只有两条记录,如下所示:

user1:
  name: 'xxx'

user2:
 name: 'xyz'

现在有了上述数据,我编写了一个测试用例,计算数据库中的记录数等于2,并且工作正常。但是当我在其他测试用例场景所需的users.yml文件中添加一个用户时,问题就出现了,计数变为3,测试用例失败。

我想知道,有没有办法为特定的测试用例创建灯具,以便每个测试用例都有自己的灯具数据?

如果答案是肯定的,那么即使我在夹具文件中添加额外的用户记录,我的计算数据库中记录数量的测试用例也不会失败。

1 个答案:

答案 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