Rspec Rails - результат тестирования before_filter не работает

Я использую Contentful Model для извлечения контента типа CMS из Contentful и отображения с помощью приложения Rails. Если ContentfulModel.use_preview_api установлен в trueЗатем Contentful Model будет запрашивать API предварительного просмотра, а не главный API, позволяя предварительно просматривать неопубликованный контент.

Я написал некоторую логику в контроллере, чтобы проверить, есть ли действительный набор ключей предварительного просмотра и, если это так, установить ContentfulModel.use_preview_api чтобы быть правдой. Все это работает в dev, но когда я прихожу, чтобы написать тесты для него, они стойко отказываются пройти. Вот мой контроллер:

class BlogPostsController < ApplicationController
  caches_action :index, :show, skip_digest: true, unless: -> { preview_enabled? }
  before_action :check_preview, only: :show

  def index
    @blog_posts = BlogPost.all.load
  end

  def show
    @blog_post = BlogPost.find_by(slug: params[:id]).load.first
  end

  private

  def preview_enabled?
    params[:preview_token] == ENV['PREVIEW_TOKEN']
  end

  def check_preview
    ContentfulModel.use_preview_api = preview_enabled?
  end
end

И вот мой тест:

require 'rails_helper'

RSpec.describe BlogPostsController, type: :controller, vcr: true do
  describe 'uses the preview API' do
    let(:subject) { get :show, params: { id: 'wanted-pioneer-partners-for-the-what-works-centre', preview_token: ENV['PREVIEW_TOKEN'] } }

    it 'when the token is set correctly' do
      subject
      expect(a_request(:get, /preview.contentful.com/)).to have_been_made.at_least_once
    end
  end
end

(Я использую WebMock для проверки того, что выполняется запрос к API предварительного просмотра Contentful, а не к основному API (который является cdn.contentful.com))

Когда я запускаю тесты, я получаю следующую ошибку:

1) BlogPostsController uses the preview API when the token is set correctly
   Failure/Error: expect(a_request(:get, /preview.contentful.com/)).to have_been_made.at_least_once

     The request GET /preview.contentful.com/ was expected to execute at least 1 time but it executed 0 times

     The following requests were made:

     GET https://cdn.contentful.com/spaces/xxxxx/environments/master/content_types?limit=1000 with headers {'Accept-Encoding'=>'gzip', 'Authorization'=>'Bearer xxxxx', 'Connection'=>'close', 'Content-Type'=>'application/vnd.contentful.delivery.v1+json', 'Host'=>'cdn.contentful.com', 'User-Agent'=>'http.rb/2.2.2', 'X-Contentful-User-Agent'=>'sdk contentful.rb/2.8.0; integration contentful_model/1.0.0; platform ruby/2.5.0; os macOS/17;'} was made 1 time
     GET https://cdn.contentful.com/spaces/xxxxx/environments/master/entries?content_type=blogPost&fields.slug=wanted-pioneer-partners-for-the-what-works-centre&include=2 with headers {'Accept-Encoding'=>'gzip', 'Authorization'=>'Bearer xxxxx', 'Connection'=>'close', 'Content-Type'=>'application/vnd.contentful.delivery.v1+json', 'Host'=>'cdn.contentful.com', 'User-Agent'=>'http.rb/2.2.2', 'X-Contentful-User-Agent'=>'sdk contentful.rb/2.8.0; integration contentful_model/1.0.0; platform ruby/2.5.0; os macOS/17;'} was made 1 time

     ============================================================

Что говорит о том, что API предварительного просмотра не получил удар.

Любые идеи относительно того, где я могу пойти не так? Я думаю, что это более чем вероятно проблема rspec-rails, а не что-то специфичное для Contentful.

0 ответов

Другие вопросы по тегам