簡體   English   中英

工廠未定義 RSPEC 測試 Ruby

[英]Factory not defined for RSPEC test Ruby

我正在嘗試為此服務編寫RSpec測試。 下面的服務本質上只是調用某個端點,然后在postgres數據庫中創建數據。

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

我的 model 只是樣板 model 所示:

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

寶石文件

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 還很陌生,因此不勝感激。

如果這是您調用工廠的方式,那么您錯過了命名工廠:

 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')

在我看來,標題、鏈接等主要應該在工廠定義中,這是工廠的重點。

如果您想使用與 model 名稱不同的工廠名稱。 然后需要添加 class_name,如下所示:

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

  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM