1

我们有一个多域应用程序,其中每个站点可以有多个域(对于语言环境)

ApplicationController 正在做

def load_site
  @site = Site.find_by!("domains like '%#{request.host}%'")
end

在我的测试套件中,我只想确保该网站正在显示

规范/功能/user_visits_homepage_spec.rb

require "rails_helper"

feature "User visits Homepage" do
  site = FactoryGirl.create :site
  scenario "successfully", js: true do
    visit root_path
    expect(page).to have_css "h1", text: site.name
  end
end

我的 database_cleaner.rb

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, js: true) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

end

问题

我如何确保我始终拥有 1 个站点,因为没有站点,控制器将无法工作。

当我像我一样创建站点时,database_cleaner 总是会杀死它。

我有错误的理解还是我错过了什么?

4

1 回答 1

1

您的数据库清理器有两个与您的问题相关的条目,前两个。

在整个套件之前,您通过截断整个数据库来清理它。然后,每个测试都包含在一个事务中。这将导致在每次测试后恢复到初始状态。要设置一些持久性数据,只需在初始清理后立即执行,如下所示:

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
    # Add setup data here which will persist through all tests (unless deleted or modified)
  end

注意不要在所有测试中使用这些数据。这应该只用于为您的应用程序建立一个最小的骨架。例如,在那里创建一个站点,但在测试站点管理的 CRUD 操作时,在单独的站点上进行。

于 2015-09-25T05:03:11.167 回答