我应该如何测试包含lib /目录方法的Rails控制器操作?

时间:2011-07-27 06:35:56

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

我的控制器操作:

 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的smth,那会更好?

2 个答案:

答案 0 :(得分: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的文档。

答案 1 :(得分:0)

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

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