在测试期间将模拟的API对象传递给rails控制器

时间:2014-10-27 18:59:25

标签: api ruby-on-rails-4 controller tdd minitest

我的问题是测试(MiniTest)一个查询API的Rails 4.0控制器。例如,我有这个控制器:

class InsolentController

    def show 

        @result = SomeApi.get value1, value2

    end

end

现在我想在不调用我的API的情况下测试它,所以如果我使用ASP.NET MVC,我可以这样做:

public Class InsolentController
{
    private SomeAPI someApi;

    public InsolentController(SomeAPI api = null)
    {

        this.someApi = api ?? new SomeAPI();
    }

    public ActionResult Show()
    {
        var result = this.someApi.Get(value1, value2);

        // return, etc...
    }
}

我这样做是为了让我可以模拟SomeAPI。因此,当我想将MiniTest与rails一起使用时,我该怎么做呢:

require 'test_helper'

class InsolentControllerTest < ActionController::TestCase

    test "should get show" do

        get :show, { value1: 10, value2: 34 }

        assert_response :success
    end

end

1 个答案:

答案 0 :(得分:1)

我最终使用rspec-mocks并使用minitest进行设置。

您应该可以轻松地执行以下操作:

require 'test_helper'

class InsolentControllerTest < ActionController::TestCase

  test "should get show" do
    value1 = 10
    value2 = 34
    expect(SomeApi).to receive(:get).with(value1, value2)

    get :show, { value1: value1, value2: value2 }
    assert_response :success
  end
end