Rails 3 - 如何测试控制器模块?

时间:2011-08-04 10:51:16

标签: ruby-on-rails ruby ruby-on-rails-3 unit-testing testunit

我有3个控制器,包括相同的模块。

如何使用Test进行测试:将模块单元放在一个位置?

我应该为每个控制器(而不是DRY)编写3个相同的功能测试吗?

TestController / TestController1 / TestController2:

class TestController < ApplicationController
 include TestModule

 test_module :test, :only => [:index]
 ...
end

TestModule:

module TestModule
 extend ActiveSupport::Concern

 module ClassMethods
  private

  def test_module(resource, options = {})
   self.before_filter(options.slice(:only, :except)) do
     puts 'test_module'
   end
  end
 end
end

提前致谢!

2 个答案:

答案 0 :(得分:2)

控制器测试应该测试......控制器。因此,您为控制器编写的任何测试都应验证控制器操作是否完全符合您的预期,无论您使用哪些模块来执行操作。将它们视为一个黑盒子,你关心的只是给控制器一些输入,然后验证它们应该是什么输出。

您应该将模块作为自己的实体进行测试,编写模型和测试以充分验证每个模块方法。您的控制器将来可能会发生变化,因此您将始终拥有模块的测试覆盖率。

答案 1 :(得分:0)

您可能希望学习使用标准工具(如RSpec)来测试控制器。

以下是Ryan Bates' Railscast

的链接