我来自 Spring/hibernate 背景。我注意到 Rails 没有 dao 和服务层。这确实加快了开发速度,但有时我不知道将测试放在哪里。
现在,我一直在将我的模型方法和验证测试放在主要模型规范中。这个文件已经相当大了。
测试查询的“标准”位置在哪里?我可以想象自己制作了大量固定装置/虚拟数据以确保我的查询按预期工作(可能是一个更好的主意,因为我是 Rails 的新手)。这些对于基本模型逻辑和验证测试来说并不是真正需要的。
如果您能提供一些关于将这些测试放在哪里的建议,使用 rails 测试查询的最佳方法(尤其是具有多个连接的查询!),也许还有一些基本准则,说明它与使用 DBunit/spring 进行测试有何不同/hibernate,那太好了。
谢谢!
最佳答案
我以前也用过hibernate。 ActiveRecord 方式与 hibernate 有很大不同。你需要让你的思想自由,不管是好是坏。在 Java 和 Hibernate 中,你通常有聚合根和对象图。通常,对象图和代码库在 ruby 中也以某种方式较小。我不知道你的具体情况,所以我会谨慎行事,但我警告你尝试让 ruby 和 rails 适应你的 java 习惯。
您可以将自定义目录与 rspec 一起使用,以对您和您的团队有意义的方式进行组织。
#spec/queries/my_custom_search_spec.rb
require 'spec_helper'
describe MyModel do
it "should do this query and return X" do
subject.some_defined_scope_search.should == "something"
end
end
你可能有子目录,由 rspec 自动获取,比如 spec/models/account/..
rake spec
或 rspec spec
将自动选取该规范。我只是在上面写了一个简单的例子,因为我不知道你的情况。您是用查询定义范围,还是定义专门的方法?
我强烈建议放弃固定装置(与插入相同 - 对我来说是反模式)以获得更可重构的东西,例如工厂。我喜欢factory_girl .它让您的应用程序以更敏捷的方式发展,IMO。
编辑: 在我的 spec_helper.rb 中添加启用/禁用自动清理的设置
RSpec.configure do |config|
require 'database_cleaner'
config.add_setting :skip_database_clean
config.skip_database_clean = false
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
end
config.after(:each) do
MongoMapper.database.collections.each(&:remove)
DatabaseCleaner.clean unless config.skip_database_clean
end
我添加了变量 skip_database_clean
以便我可以在每个规范(每个“它”)之后启用/禁用自动清理。
before :all do
@an_object = some_expensive_test_buildup
RSpec.configuration.skip_database_clean = true
end
after :all do
RSpec.configuration.skip_database_clean = false
DatabaseCleaner.clean
end
关于ruby-on-rails - 我应该将我的数据库查询测试放在 Rails 中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5862786/