代码之家  ›  专栏  ›  技术社区  ›  Tiago

使用VCR for Rails播放请求不在use_cassete范围内的cassete

  •  0
  • Tiago  · 技术社区  · 7 年前

    我已经建立了一个API( MyAPI )连接到外部API进行身份验证的( ExAPI ).

    对于需要对用户进行身份验证的MyAPI的所有请求,他发送一个带有令牌的cookie,然后将其发送给ExAPI,然后它获取用户信息。

    我记录了一个带有此请求的卡塞特:

    describe 'VCR-RSpec integration' do
      def make_http_request
        connect = Faraday.new(url: (ENV['EX_API']).to_s) do |faraday|
          faraday.request :url_encoded
          faraday.response :logger 
          faraday.adapter Faraday.default_adapter 
        end
        connect.authorization :Bearer, ENV['USER_TOKEN']
        connect.get('/auth/...')
      end
    
      skip 'without an explicit cassette name' do
        it 'records an http request' do
          VCR.use_cassette('user_token') do
            expect(make_http_request).to be_success
          end
        end
      end
    end
    

    在我的代码中,如果我调用 user_stories 它需要一个带有 user_token 将其发送到ExAPI,如果有效,则执行所需的操作。

    describe UserStoriesController, type: :controller do
      before(:each) do
        set_cookies
      end
    
      context do
        let!(:user) {
          FactoryGirl.create(:user)
        }
        let!(:some_user_stories) {
          FactoryGirl.create_list(:user_story, 3, user: user)
        }
    
        describe 'GET index' do
          it 'returns a successful 200 response' do
            VCR.use_cassette('user_token') do
              get :index
              expect(response).to be_success
            end
          end
        end
      end
    end
    

    问题是没有使用cassete(我假设这是因为连接到ExAPI的代码不在 VCR.use_cassete 范围,但在控制器内的方法中。

    这是一种方法吗?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  0
  •   Tiago    7 年前

    好吧,我错了。我忘记初始化VCR:

    VCR.configure do |config|
      config.cassette_library_dir = "fixtures/vcr_cassettes"
      config.hook_into :webmock
    end