【问题标题】:How I should test a Rails controller action which includes a method from lib/ directory?我应该如何测试包含 lib/ 目录中的方法的 Rails 控制器操作?
【发布时间】:2011-07-27 06:35:55
【问题描述】:

我的控制器操作:

 def single
    final_static_matrix = Single.final_static_matrix(average_static_matrix, params[:priorities])
   
     ...

  end

在我的 lib/single.rb 中:

module Single
  def self.final_static_matrix(average_static_matrix = {}, priorities = {})
    final_static_matrix = Hash.new

    for i in 0..average_static_matrix.length-1
      final_static_matrix[i.to_s] = average_static_matrix*priorities[i.to_s]
    end

    final_static_matrix
  end
end

在我的 controller_spec.rb 中:

it "should be successful" do
  get :single, :id => 1
  priorities = {"0" => "1"}
  matrix = {"0" => "3"}
  Single.final_static_matrix(matrix, priorities)
  response.should be_success
end
  1. 我应该如何从 lib/ 目录调用函数?
  2. 如果我在控制器文件中编写测试或创建类似 single_spec.rb 的东西会更好吗?

【问题讨论】:

    标签: ruby-on-rails-3 testing rspec


    【解决方案1】:

    我会做什么:在控制器规范中,我会测试该方法是否被调用:

    describe "GET :single" do
      it "succeeds" do
        Single.should_receive(:final_static_matrix).and_return('something')
    
        get :single, :id => 1
      end
    end
    

    在spec/lib/single_spec.rb 内部,您测试final_static_matrix 是否按预期运行。

    您可以查看rspec2 here的文档。

    【讨论】:

      【解决方案2】:

      如果您已将其包含在您的应用程序中,那么您应该可以在测试中使用它。

      对于控制器测试,请测试控制器。 如果需要,可以单独对库本身进行单元测试。

      【讨论】:

        猜你喜欢
        • 2013-06-02
        • 1970-01-01
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        • 2011-01-27
        • 1970-01-01
        • 1970-01-01
        • 2012-04-29
        相关资源
        最近更新 更多