在Rails(factory_girl)中清除单元和功能测试之间的测试数据库

Nol*_*nDC 20 ruby unit-testing ruby-on-rails factory-bot

最近我从fixtures切换到factory_girl来测试我的Ruby on Rails应用程序.如果我运行rake test:units,要在my/units目录中运行测试,它们都运行完美.如果我使用rake test:functionals运行我的功能测试(在我的/ functional目录中),情况也是如此.

但是,如果我只是运行rake测试,同时运行我的单元和功能测试,我的验证将在第二组测试中失败(在这种情况下是功能的),并显示消息"验证失败:名称已被采用".

我相信这是由功能测试创建的,这些参数创建的参数与在单元测试中创建的对象具有相同的参数 - 这使我相信在单元测试和功能测试之间不会清除测试数据库.

我使用factory_girl的序列来为对象提供唯一的属性,这意味着factory_girl在测试之间被重置,而数据库则没有.我该怎么做才能解决这个问题?有没有办法在我的两个测试包之间清除数据库?

Ami*_*kar 13

清除(重建)测试数据库的命令行解决方案:

rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)


Vik*_*ary 12

试着写下你的 test/test_helper.rb

eval IO.read(File.expand_path(File.dirname(__FILE__) + "/../Rakefile"))
class Test::Unit::TestCase
 ....
 #db:test:prepare won't work, don't know why,
 #as DROP DATABASE won't execute (me on PostgreSQL).
 #even if I write,
 #ActiveRecord::Base.connection.disconnect!
 Rake::Task["db:reset"].invoke
end
Run Code Online (Sandbox Code Playgroud)

不是推荐的解决方案.使测试更慢,但有效.