Rails:如何testinglib /目录中的代码?
我有一个从parsing器对象获取数据的模型。 我在想,parsing器类应该活在lib /目录下(尽pipe我可以说它应该在其他地方)。 问题是:我的单元应该在哪里testingparsing器类? 我如何确保每次运行耙testing时都运行它们?
在我正在使用的Rails应用程序中,我决定只将testing放在test\unit
目录中。 我也将它们通过模块/目录嵌套,例如:
lib/a.rb => test/unit/a_test.rb lib/b/c.rb => test/unit/b/c_test.rb
对我来说,这是最后一次抵抗的道路,因为这些testing不需要做任何其他的改变。
这里有一个方法:
使用以下lib/tasks/test_lib_dir.rake
创buildlib/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
在test
目录下模仿你的lib
目录的结构,用相应的testingreplacelib代码。
运行rake test:lib
运行你的libtesting。
如果您希望在调用rake test
时运行所有testing,则可以将以下内容添加到您的新rake文件中。
lib_task = Rake::Task["test:lib"] test_task = Rake::Task[:test] test_task.enhance { lib_task.invoke }
我正在寻找做同样的事情,但与rspec&autospec,它花了一点挖掘,以弄清楚他们在哪里得到的目录/文件模式,决定哪些testing文件运行的列表。 最终我发现这在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文件被configuration为在spec / lib中查找时,我已经将我的testing放在新的spec / libs目录中。 简单地重命名库 – >库做了诡计!
一个简单而干净的方法就是创build一个testing目录/ unit / lib。 然后创build相应于lib / foo.rb的test / unit / lib / foo_test.rb作为testing。 不需要新的rake任务,如果需要匹配lib目录结构,可以嵌套更多的目录。
从Rails 4.0开始 :
rake 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
从Rails 4.1开始 ,重新定义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
。
从Rails 4.2开始 , test:run
包含了运行rake test
时test
所有子目录,从而进行rake
rake test
。
要不定义额外的rake任务来运行自定义文件夹中的testing,你也可以使用rake test:all
命令运行它们。 testinglib
文件夹或任何其他自定义文件夹的文件夹结构由您决定。 但我更喜欢在类中复制它们: lib
被匹配到test/lib
, app/form_objects
来test/form_objects
。
使用:
[spring] rake test:all
运行所有testing,包括您创build的目录(如[root]/test/lib/
)。
如果tou不使用,则省略[spring]
。