Ruby on rails 运行测试时,rspec是否访问数据库?
我正在使用RSpecRails测试rails应用程序中的控制器。在一个实例中,我创建了新的对象来测试它们是否被正确地分配给实例变量Ruby on rails 运行测试时,rspec是否访问数据库?,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我正在使用RSpecRails测试rails应用程序中的控制器。在一个实例中,我创建了新的对象来测试它们是否被正确地分配给实例变量 describe MainController do describe "GET #index" do it "properly assigns a colored ball" do ball1 = Ball.create(color: 'red') get :index
describe MainController do
describe "GET #index" do
it "properly assigns a colored ball" do
ball1 = Ball.create(color: 'red')
get :index
expect(assigns(:red_balls)).to eq([ball1])
end
end
end
当我运行测试时,rspec是否访问数据库以创建ball1,然后在测试运行后将其删除 根据您问题中的代码片段,是
Rspec
访问database.yml
文件中配置为test的DB,如果您想清除Rspec
创建的DB/记录,您可以使用
e、 g:
将gem数据库\u cleaner
添加到您的gem文件中
下面是spec\u helper.rb
文件,由database\u cleaner
文档指定:
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
然后,
database\u cleaner
将截断test db
中的表,并使它们保持原始状态以添加到bjhaid上面所说的内容中-Rspec应该只访问您的“测试”数据库。查看config/database.yml以查看不同数据库的配置
因此,您不必担心开发或生产数据库中的事情会干扰您的测试数据库。是的,RSpec允许您的数据库调用通过,但在默认配置下使用RSpec rails gem,它将在数据库事务中执行每个测试,并在每个示例结束时回滚该事务,而不需要您执行任何操作。不需要额外的gem。看