我有一个模型,它从解析器对象中获取数据。 我认为解析器类应该存储在lib /目录中(虽然我可能会被说服它应该存储在其他地方)。问题是:解析器类的单元测试应该放在哪里? 如何确保每次运行rake test时都会运行它们?
我有一个模型,它从解析器对象中获取数据。 我认为解析器类应该存储在lib /目录中(虽然我可能会被说服它应该存储在其他地方)。问题是:解析器类的单元测试应该放在哪里? 如何确保每次运行rake test时都会运行它们?
我在开发的Rails应用中,决定把测试放在test\unit
目录中。我还会按模块/目录进行嵌套,例如:
lib/a.rb => test/unit/a_test.rb
lib/b/c.rb => test/unit/b/c_test.rb
对我而言,这是最后的抵抗之路,因为这些测试运行时无需进行其他任何更改。这是一种方法:
创建lib/tasks/test_lib_dir.rake
文件,并添加以下内容:
namespace :test do
desc "Test lib source"
Rake::TestTask.new(:lib) do |t|
t.libs << "test"
t.pattern = 'test/lib/**/*_test.rb'
t.verbose = true
end
end
将您的lib
目录结构复制到test
目录下,并用相应的测试代码替换库代码。
运行rake test:lib
来运行您的库测试。
如果您希望在调用rake test
时运行所有测试,可以将以下内容添加到您的新rake文件中。
lib_task = Rake::Task["test:lib"]
test_task = Rake::Task[:test]
test_task.enhance { lib_task.invoke }
ActiveSupport
的 fixtures
),而且在 rakefile 中也没有强制它的方法。 - phil pirozhkovrake test:lib
运行了我的测试,但是 rake test
没有运行。我完全复制了它。这里是我的文件内容链接:http://pastebin.com/FHMXU6vG。提前感谢! - robert我也想用rspec和autospec完成同样的事情,但需要花费一些时间来找到它们获取测试文件列表所依据的目录/文件模式列表。最终,我在lib/tasks/rspec.rake:86中找到了这些信息。
[:models, :controllers, :views, :helpers, :lib, :integration].each do |sub|
desc "Run the code examples in spec/#{sub}"
Spec::Rake::SpecTask.new(sub => spec_prereq) do |t|
t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
end
end
当rpsec.rake文件配置为查找spec/lib目录时,我已经将我的测试放置在一个新的spec/libs目录中。只需将libs重命名为lib即可解决问题!
/lib
文件夹。不幸的是,rake test
无法捕获这些文件,因此只能使用RSpec,并且必须使用上述解决方案。 - phil pirozhkovrake test:all # Run all tests in any subdir of `test` without resetting the DB
rake test:all:db # Same as above and resets the DB
test:run
,在运行rake
或rake test
时包括其他任务:# lib/tasks/test.rake
namespace :test do
Rake::Task["run"].clear
task run: ["test:units", "test:functionals", "test:generators", "test:integration", "test:tasks"]
["tasks"].each do |name|
Rails::TestTask.new(name => "test:prepare") do |t|
t.pattern = "test/#{name}/**/*_test.rb"
end
end
end
rake test:tasks
。test:run
包含test
的所有子目录,当运行rake test
和rake
时也包括它们。一种简单而干净的方法是在test/unit/lib目录下创建一个文件夹。然后,创建测试文件test/unit/lib/foo_test.rb对应于lib/foo.rb。无需创建新的rake任务,并且如果需要匹配lib目录结构,则可以嵌套更多目录。
rake test:all
来运行它们。对于lib
文件夹或任何其他自定义文件夹的测试文件夹结构由您决定。但我更喜欢将它们复制到类中:lib
匹配到test/lib
,app/form_objects
匹配到test/form_objects
。使用:
[spring] rake test:all
运行所有测试,包括您创建的目录(例如[root]/test/lib/
)。
如果您没有使用它,请省略[spring]
。
lib
的最佳实践是什么? - Steven Aguilar