我在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
可以提出哪些方案来解决此问题?
答案 0 :(得分:1)
Here是Apartment
的RSpec配置示例。请注意删除架构的部分。
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
答案 1 :(得分:1)
找出config.block_unknown_url
问题的真正原因。
问题是我的“capybara.rb”中有lvh.me
。
为了测试多租户我使用config.allow_url("*.lvh.me")
域名,因此我需要将js: true
添加到“capybara.rb”文件中以修复损坏的#include <stdio.h>
int foo(int i){return i+1;}
typedef int(*mytype[2])(int);
int main(void)
{
mytype f;
f[0] = foo;
f[1] = &foo;
printf("%d %d", f[0](5), f[0](6));
return 0;
}
内容。