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在运行rakerake 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 testtest所有子目录,从而进行rake rake test

要不定义额外的rake任务来运行自定义文件夹中的testing,你也可以使用rake test:all命令运行它们。 testinglib文件夹或任何其他自定义文件夹的文件夹结构由您决定。 但我更喜欢在类中复制它们: lib被匹配到test/libapp/form_objectstest/form_objects

使用:

 [spring] rake test:all 

运行所有testing,包括您创build的目录(如[root]/test/lib/ )。

如果tou不使用,则省略[spring]