ege*_*ari 7 ruby database testing model ruby-on-rails
我来自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
Run Code Online (Sandbox Code Playgroud)
并且您可能有子目录,自动被 rspec 拾取,例如spec/models/account/..
rake spec
规格将自动由或选取rspec spec
。上面我只是写了一个简单的例子,因为我不知道你的情况。您是否使用查询定义范围,或定义专门的方法?
我强烈建议放弃固定装置(与插入相同 - 对我来说是反模式),转而采用更可重构的东西,例如工厂。我喜欢工厂女孩。在我看来,它可以让您的应用程序以更敏捷的方式发展。
编辑:添加我的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
Run Code Online (Sandbox Code Playgroud)
我添加了变量,skip_database_clean
以便我可以在每个规范(每个“it”)之后启用/禁用自动清理。
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2487 次 |
最近记录: |