【问题标题】:Ruby on Rails Method Mocks in the Controller控制器中的 Ruby on Rails 方法模拟
【发布时间】:2013-05-18 20:40:43
【问题描述】:

我正在尝试在我的一个 Rails 控制器(在本例中为 Instagram.get_access_token)内模拟对外部 API 的方法调用,但遇到了一些麻烦。如所写,代码仍在调用真正的 Instagram.get_access_token 方法。如何让控制器使用我的简单模拟?

sessions_controller.rb:

class SessionsController < ApplicationController

  require 'instagram'
  include ApplicationHelper

  def auth_callback
    response = Instagram.get_access_token(params[:code],
                                          redirect_uri: auth_callback_url)
    #<snipped extra code>
  end
end

sessions_controller_spec.rb:

require 'spec_helper'
require 'ostruct'

describe SessionsController do
  describe "GET #auth_callback" do
    context "when there is an existing user" do
      let(:response) { OpenStruct.new(access_token: "good_access_token") }

      it "parses an access_token from the get response" do
        Instagram.should_receive(:get_access_token).and_return(response)

        #<snipped extra code>
      end
    end
  end
end

【问题讨论】:

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


    【解决方案1】:

    试试:

    Instagram.stub(:get_access_token) { response }
    

    你有同样的结果吗?

    【讨论】:

    • 是的,它仍在调用真正的 Instagram.get_access_token(因此给了我一个 Instagram::BadRequest 响应(而不是我的简单结构)。
    • 这很奇怪。 stubshould_receive 应该可以工作。如果你使用before (:each) 块,你有同样的结果吗?
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多