5

在不使用 Mocha 的 any_instance 的情况下如何执行以下操作?我只想在不使用 Rspec的情况下测试此处描述的受保护控制器。

class PortfoliosControllerTest < ActionController::TestCase

  setup do
    @portfolio = portfolios(:p2)
    user = @portfolio.user

    token = Doorkeeper::AccessToken.create!(application_id: 'minitest',
                                            resource_owner_id: user.id)
    PortfoliosController.any_instance.stubs(:doorkeeper_token).returns(token)
  end
end
4

3 回答 3

7

您不需要存根 PortfoliosController 的任何实例,只需存根测试正在使用的实例即可。这在@controller变量中可用,如ActionController::TestCase 文档中所述。

class PortfoliosControllerTest < ActionController::TestCase

  setup do
    @portfolio = portfolios(:p2)
    user = @portfolio.user

    token = Doorkeeper::AccessToken.create!(application_id: 'minitest',
                                            resource_owner_id: user.id)
    @controller.stubs(:doorkeeper_token).returns(token)
  end
end
于 2014-10-31T21:38:17.917 回答
3

我建议检查一下这颗宝石。会让你做类似的事情......

class PortfoliosControllerTest < ActionController::TestCase
  def cool_test
    PortfoliosController.stub_any_instance(:doorkeeper_token, token) do
      # Assert whatever you were going to assert
    end
  end
end

一种不用担心的好setup

于 2015-03-16T05:15:46.917 回答
1

'blowmage' 答案的'no Mocha' 版本

 class PortfoliosControllerTest < ActionController::TestCase

  setup do
    @portfolio = portfolios(:p2)
    user = @portfolio.user

    token = Doorkeeper::AccessToken.create!(application_id: 'minitest',
                                            resource_owner_id: user.id)
    @controller.stub(:doorkeeper_token,token) do
      #do your tests
    end
  end
end

http://www.rubydoc.info/gems/minitest/4.2.0/Object:stub

于 2016-05-11T12:49:58.500 回答