заглушка метода класса внутри метода в rspe c для возврата true - PullRequest
0 голосов
/ 11 июля 2020

вот класс, для которого я пишу rspecs.

# frozen_string_literal: true. Thiis is the method **SiteLicenseService.get_package_for_site_license site_license_id, package_id**

module SiteLicenseGrants
  # Raise an error if no site license is found for a given package
  class Package
    # Fail if the given packages are not found or if they are not associated
    # with the site license
    def self.valid_package?(opts)
      package_id = opts[:package_id]
      site_license_id = opts[:site_license_id]
      return true if SiteLicenseService.get_package_for_site_license site_license_id, package_id
    rescue Errors::EntityNotFound
      raise Errors::NoSiteLicenseForPackage.new package_id # rubocop:disable Style/RaiseArgs
    end
  end
end

я хочу, чтобы метод класса возвращал true.

require "rails_helper"

RSpec.describe SiteLicenseGrants::Package do
  describe "check valid package" do

    context "valid package" do
      let(:package_id) { 1 }
      let(:site_license_id) { 1 }
      let(:opts) { { package_id: package_id, site_license_id: site_license_id } }
      before do
        site_license_service = class_double("SiteLicenseService")
        allow(site_license_service).to receive(:get_package_for_site_license).with(site_license_id, package_id).and_return(true)
      end

      it "returns true" do
        expect do
          described_class.valid_package?(opts)
        end.to be_truthy
      end
    end

    context "invalid package" do
      let(:opts) { { package_id: nil, site_license_id: nil } }
      it "throws error" do
        expect do
          described_class.valid_package?(opts)
        end.to raise_error(Errors::NoSiteLicenseForPackage)
      end
    end
  end
end

вот ошибка im получение

Failures:

  1) SiteLicenseGrants::Package check valid package valid package returns true
     Failure/Error: raise Errors::NoSiteLicenseForPackage.new package_id # rubocop:disable Style/RaiseArgs
     
     Errors::NoSiteLicenseForPackage:
       Package 1 doesn't have a site license associated with it

Я просто хочу имитировать метод моего класса, чтобы вернуть истину. Я не хочу тестировать методы класса SiteLicenseService . Я не хочу создавать лицензию на сайт буквально с помощью пакета.

может ли кто-нибудь объяснить мне, в чем я ошибаюсь.

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Я вот так поменял заглушку, и она начала работать

 before do
        allow(SiteLicenseService).to receive(:get_package_for_site_license).and_return(true)
      end

теперь не ищет связи. но я ценю, если кто-нибудь скажет мне, что изменилось внутри.

0 голосов
/ 11 июля 2020

Убедитесь, что синтаксис имитации возвращаемого значения верен:

 allow(SiteLicenseService).to 
 receive(:get_package_for_site_license).and_return(true)

В Ruby классы записываются в TitleCase, а методы записываются в snake_case. Полученный метод должен быть: символ.

...