使用 RSpec 和 Rails 测试带参数的方法调用

Testing a method call with arguments using RSpec and Rails

我有这个 Rails API 并且我正在尝试在我的控制器中测试两个动作。第一个应该调用第二个。我如何使用 RSpec 执行此操作?

这些是操作:

def method1
    (...)
    method2(@example_var)
end

def method2(id)
    (...)
end

到目前为止,我已经试过了,没有成功

describe "#method1" do
    it "calls the method2 with id" do
        Rails::logger.info "Testing METHOD1"
        var = Parent.create(FactoryGirl.attributes_for(:valid_attributes))
        get :method1, :id => var.id

        Parent.should_receive(:method2).with(var.id)
        Parent.method2
    end
end

有什么帮助吗?

编辑:如果信息不够,我很乐意提供更多。

  1. method2 未在 Parent 上调用。它将在控制器实例上调用
  2. 调用前应设置期望值
  3. method2是私有方法吗?如果它是一个动作,你应该重定向到动作而不是调用方法。

但是如果您想在 method2 调用上设置预期,请执行以下操作

describe "#method1" do
    it "calls the method2 with id" do
        Rails::logger.info "Testing METHOD1"
        var = Parent.create(FactoryGirl.attributes_for(:valid_attributes))
        @controller.should_receive(:method2).with(var.id)
        get :method1, :id => var.id
    end
end

这不完全是一个答案,但这是我的意图和解决方案:)希望这可以帮助需要它的人

测试:

describe "GET #method1" do
    it "gets a parent by :id and redirect_to #method2" do
        Rails::logger.info "Testing METHOD1 with redirect to METHOD2"
        vars = Parent.create(FactoryGirl.attributes_for(:valid_params))

        expect redirect_to('method2/' + vars.field1 + '/' + vars.field2 + '/' + vars.field3)
    end
end

控制器:

def close
    (...)
    redirect_to :controller => 'Parents', :action => 'method2', :field1 => @parent[:field1], :field2 => @parent[:field2], :field3 => @parent[:field3]
end