模型 class 尝试访问数据库,即使使用双
model's class trying to access database even using double
我有这样的模型结构
models/
-- a.rb
-- b.rb
-- project_a/
---- a.rb
---- b.rb
文件夹 project_a
中的 class 是来自另一个 Rails 项目的 class。我没有它们的迁移,我只是用它们来调用 find
。这是一个迁移数据的项目。实际上,所有这些来自 project_a
的 class 都继承了这个 class:
class ProjectA::ProjectADatabase < ActiveRecord::Base
self.abstract_class = true
establish_connection "project_a_#{Rails.env == 'production' ? 'production' : 'development' }".to_sym
end
所以,因为我没有迁移,所以我不能使用工厂来测试它们,所以,我加倍了。我的大部分双打都是这样
def stubs_all_finds
allow(ProjectA::Like).to receive(:find).and_return(create_like)
end
def create_like
like = double(ProjectA::Like)
end
但是当我推送到 Github 时,codeship 无法 运行 测试:
1) Class validations
Failure/Error: stubs_all_finds
ActiveRecord::AdapterNotSpecified:
'project_a_development' database is not configured. Available: ["development", "test"]
似乎甚至翻了一番,我的 class 正在尝试连接到数据库。有什么办法可以预防吗?
您的 classes 在定义后立即尝试连接到数据库 - 仅要求基础 class 的行为将尝试连接数据库,因为 class 定义包含对 establish_connection
的调用
您可以在测试时跳过对 establish_connection
的调用 - 如果您正在删除所有后续数据库访问,那么基础 class 指向错误的数据库应该无关紧要.
或者您可以考虑创建一个 project_a_test_database - 您可以从其他应用程序复制 schema.rb 并将其加载到单独的数据库中。
我有这样的模型结构
models/
-- a.rb
-- b.rb
-- project_a/
---- a.rb
---- b.rb
文件夹 project_a
中的 class 是来自另一个 Rails 项目的 class。我没有它们的迁移,我只是用它们来调用 find
。这是一个迁移数据的项目。实际上,所有这些来自 project_a
的 class 都继承了这个 class:
class ProjectA::ProjectADatabase < ActiveRecord::Base
self.abstract_class = true
establish_connection "project_a_#{Rails.env == 'production' ? 'production' : 'development' }".to_sym
end
所以,因为我没有迁移,所以我不能使用工厂来测试它们,所以,我加倍了。我的大部分双打都是这样
def stubs_all_finds
allow(ProjectA::Like).to receive(:find).and_return(create_like)
end
def create_like
like = double(ProjectA::Like)
end
但是当我推送到 Github 时,codeship 无法 运行 测试:
1) Class validations
Failure/Error: stubs_all_finds
ActiveRecord::AdapterNotSpecified:
'project_a_development' database is not configured. Available: ["development", "test"]
似乎甚至翻了一番,我的 class 正在尝试连接到数据库。有什么办法可以预防吗?
您的 classes 在定义后立即尝试连接到数据库 - 仅要求基础 class 的行为将尝试连接数据库,因为 class 定义包含对 establish_connection
您可以在测试时跳过对 establish_connection
的调用 - 如果您正在删除所有后续数据库访问,那么基础 class 指向错误的数据库应该无关紧要.
或者您可以考虑创建一个 project_a_test_database - 您可以从其他应用程序复制 schema.rb 并将其加载到单独的数据库中。