Rspec/Capybara`js: true` 问题

Rspec/Capybara`js: true` issue

我在 Rails 应用程序中使用 Rspec/Capybara。在一项功能测试中,我有 js: true 选项来检查模态并单击其中的按钮。在我为多租户和 PosgreSQL 模式添加 apartment gem 之前一直工作正常。

现在找不到调用模态的按钮。我不确定它是否已正确记录(binding.pry 无法在 js 的测试中正确工作)。 我认为这是 DatabaseCleaner 问题,但我的配置似乎是正确的(见下文)。

RSpec.configure do |config|
  config.use_transactional_fixtures = false

  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
    Apartment::Tenant.switch!
    DatabaseCleaner.start
  end

  config.append_after(:each) do
    DatabaseCleaner.clean
    Apartment::Tenant.reset
  end
end

可以建议哪些选项来解决此问题?

HereApartment 的 RSpec 配置示例。请注意删除schema的部分。

RSpec.configure do |config|
  config.before(:suite) do
    # Clean all tables to start
    DatabaseCleaner.clean_with :truncation
    # Use transactions for tests
    DatabaseCleaner.strategy = :transaction
    # Truncating doesn't drop schemas, ensure we're clean here, app *may not* exist
    Apartment::Tenant.drop('app') rescue nil
    # Create the default tenant for our tests
    Company.create!(name: 'Influitive Corp.', subdomain: 'app')
  end

  config.before(:each) do
    # Start transaction for this test
    DatabaseCleaner.start
    # Switch into the default tenant
    Apartment::Tenant.switch! 'app'
  end

  config.after(:each) do
    # Reset tentant back to `public`
    Apartment::Tenant.reset
    # Rollback transaction
    DatabaseCleaner.clean
  end
end

您也可以重写 DatabaseCleaner 配置的一部分,使其更短一些

config.before(:each) do |example|
  DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
  DatabaseCleaner.start
  ...
end

找出 js: true 问题的真正原因。 问题是我的 "capybara.rb" 中有 config.block_unknown_url。 为了测试多租户,我使用 lvh.me 域,所以我需要将 config.allow_url("*.lvh.me") 添加到 "capybara.rb" 文件以修复损坏的 js: true 内容。