4

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

如何使用 Test:Unit 将模块集中在一个地方进行测试?

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

测试控制器/测试控制器1/测试控制器2:

class TestController < ApplicationController
 include TestModule

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

测试模块:

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

提前致谢 !

4

2 回答 2

1

控制器测试应该准确地测试……控制器。因此,您为控制器编写的任何测试都应验证控制器操作是否完全符合您的预期,无论您为它们添加了哪些模块来完成它们的工作。将它们视为一个黑匣子,您所关心的只是为控制器提供一些输入,然后验证输出是否为应有的输出。

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

于 2011-08-04T11:57:49.467 回答
0

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

这是Ryan Bates 的 Railscast的链接

于 2011-08-04T22:16:31.360 回答