Я пытаюсь написать RSpec
тест для этой службы. Служба ниже, по сути, просто делает вызов некоторой конечной точке и затем создает данные в postgres
DB.
class SomeService
API_URL = "someEndPoint"
def process
get_reviews
end
def get_reviews
conn = Faraday.new(url: "#{APIURL}/#{ENV["ID"]}/reviews?language=en&stars=5") do |faraday|
faraday.headers["apikey"] = ENV["KEY"]
faraday.adapter Faraday.default_adapter
end
response = conn.get
imported_reviews = []
results = JSON.parse(response.body)
results["reviews"].each do |item|
review = SomeModel.create(
title: item["title"],
body: item["text"],
posted_at: item["createdAt"],
link: "https://somelink.com/#{item["id"]}",
display_name: item["consumer"]["displayName"]
)
imported_reviews << review
end
imported_reviews
end
end
Моя модель - это просто шаблонная модель, показанная как:
class SomeModel < ApplicationRecord
end
Это мой файл спецификаций some_service_spec.rb
. Я написал множество тестов в JEST, но в Ruby он мне настолько чужд.
# frozen_string_literal: true
require 'rails_helper'
describe TrustpilotService do
describe "#process" do
context 'with valid API_KEY' do
before :all do
WebMock.allow_net_connect!
end
after :all do
WebMock.disable_net_connect!(allow_localhost: true)
end
it "should import reviews to database" do
key = "90e0dbc7160d4024a1f12bc24b3d1def" #fake key#
some_review = create(title: 'Blah', body: 'Blah blah', posted_at: '2019-09-30T20:35:14Z', link: 'https://somelink.com/reviews/asdf123', display_name: 'Jane Doe')
some_review.save!
service = described_class.new
expect{ service.process }.to change{ SomeModel.count }
end
end
end
end
Редактировать добавил мою фабрику для справки
FactoryBot.define do
factory :trustpilot_review do
end
end
Gem File
group :test do
gem "capybara", "~> 3.29.0"
gem 'database_cleaner'
gem 'factory_bot_rails'
gem 'rails-controller-testing'
gem 'rspec-rails', '~> 3.8'
gem 'rspec-snapshot', '~> 0.1.2'
gem "shoulda-matchers"
gem "simplecov", require: false
gem 'timecop'
gem "webdrivers"
gem 'webmock'
end
Я просто пытался скопировать другую спецификациюфайл, который тестировал службу, которая делает то же самое, но я получаю Factory not registered:
как ошибку. Я создал фабрику, но не совсем уверен, что на ней даже положить. Вся информация о RSPEC там устарела. Как вы можете сказать, я довольно новичок в Ruby, поэтому любая помощь приветствуется.