RSpe c неопределенный метод `to_sym ' - PullRequest
2 голосов
/ 05 марта 2020

Мой класс отвечает за связь с правлением компании Jira, которое я хочу протестировать.

class

module Jira
  class JiraConnection
    URL = 'https://company_name.atlassian.net/'.freeze

    def call
      JIRA::Client.new(options)
    end

    private

    def options
      {
        username: ENV['USERNAME'],
        password: ENV['PASSWORD'],
        site: URL,
        context_path: '',
        auth_type: :basic,
        use_ssl: true
      }
    end
  end
end

JIRA::Client.new происходит от jira- ruby драгоценный камень . Я хочу проверить это

мои характеристики:

RSpec.describe Jira::JiraConnection, type: :service do
  subject(:connect) { described_class.new }

  let(:options) do
    {
      username: username_secret,
      password: password_secret,
      site: 'https://company_name.atlassian.net/',
      context_path: '',
      auth_type: :basic,
      use_ssl: true
    }
  end

  let(:username_secret) { ENV.fetch('USERNAME') }
  let(:password_secret) { ENV.fetch('PASSWORD') }

  before do
    allow(JIRA::Client).to receive(:new).with(options)
  end

  it 'connect to Jira API' do
    expect(subject.call).to receive(JIRA::Client)
  end
end

При указанных выше характеристиках я получаю сообщение об ошибке:

Failure/Error: expect(subject.call).to receive(JIRA::Client)

 NoMethodError:
   undefined method `to_sym' for JIRA::Client:Class
   Did you mean?  to_s

Ответы [ 2 ]

0 голосов
/ 07 марта 2020

Что вы, вероятно, хотите вместо этого:

describe '#call' do
  it 'initializes Jira API client with proper connection options' do
    expect(JIRA::Client).to receive(:new).with(options).once
    connect.call
  end

  it 'returns Jira API client' do
    expect(connect.call).to be_a(JIRA::Client)
  end
end
0 голосов
/ 05 марта 2020

Вы пытаетесь проверить возвращаемое значение метода, но используете expect(...).to receive API, который предназначен для проверки того, что метод был вызван (или для заглушки метод).

Если вы хотите проверить, что возвращаемое значение является экземпляром JIRA::Client, вы можете сделать это следующим образом:

expect(subject.call).to be_a(JIRA::Client)

В качестве альтернативы, используя более базовые c eq (равно) совпадение:

expect(subject.call.class).to eq(JIRA::Client)
...