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
可以建议哪些选项来解决此问题?
Here 是 Apartment
的 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
内容。
我在 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
可以建议哪些选项来解决此问题?
Here 是 Apartment
的 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
内容。