Ruby on rails 运行测试时,rspec是否访问数据库?

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

我正在使用RSpecRails测试rails应用程序中的控制器。在一个实例中,我创建了新的对象来测试它们是否被正确地分配给实例变量

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。看