Заводская установка не определена для теста RSPEC Ruby - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь написать 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, поэтому любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Если вы хотите использовать фабричное имя с другим названием модели. затем необходимо добавить имя_класса, как показано ниже:

FactoryBot.define do
  factory :trustpilot_review, class: 'SomeModel' do

  end
end
0 голосов
/ 01 октября 2019

Если вы так называете свою фабрику, то вы пропустили название фабрики:

 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 = create(:trustpilot_review, title: 'Blah', body: 'Blah blah', posted_at: '2019-09-30T20:35:14Z', link: 'https://somelink.com/reviews/asdf123', display_name: 'Jane Doe')

Также мне кажется, что название, ссылкаи т. д., в основном должны быть в определении фабрики, которое является точкой фабрики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...