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.