NameError: неинициализированные константные парсеры в RSpec - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь протестировать простой класс в моем приложении Ruby 2.5.0:

source/parsers/jira_parser.rb

module Parsers
  class JiraParser
    def initialize(event)
      payload = event['body']
      @event = JSON.parse(payload)
    end

    def call
      {
        reporter_email: reporter_email,
        reporter_name: reporter_name,
        ticket_number: ticket_number,
        description: description
      }
    end

    private

    attr_reader :event

    def reporter_email
      event.dig('issue', 'fields', 'reporter', 'emailAddress')
    end
# other methods from call are pretty much the same as `reporter_email`

со следующими характеристиками:

spec /source/parsers/jira_parser_spec.rb

require 'spec_helper'

RSpec.describe Parsers::JiraParser do
  describe 'call' do
    subject(:hash_creation) { described_class.new(event).call }

    let(:reporter_name) { 'john.doe' }
    let(:reporter_email) { 'john.doe@example.com' }
    let(:description) { 'This is a test description' }

    let(:event) do
      {
        'body' => {
          'issue': {
            'key': 'TEST-Board-123',
            'fields': {
              'reporter': {
                'displayName': reporter_name,
                'emailAddress': reporter_email
              },
              'description': description
            }
          }
        }
      }
    end

    it { expect(hash_creation).to be_success }
  end
end

Но у меня есть ошибка:

NameError: неинициализированная константа Parsers

. / spec / source / parsers / jira_parser_spe c .rb: 5: in `'Примеры не найдены.

Должен ли я добавить что-то в мой rspec_helper, чтобы он работал? Прямо сейчас это довольно основа c:

RSpec.configure do |config|
  config.expect_with :rspec do |expectations|
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end
  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end

  config.shared_context_metadata_behavior = :apply_to_host_groups
end

Ответы [ 3 ]

1 голос
/ 11 февраля 2020

Я понимаю, что это просто Ruby, без Рельсов, следовательно, здесь нет магов c. Вам нужно сделать исходный файл доступным в файле spe c, поэтому вы должны поместить в начало что-то вроде:

require_relative '../../../source/parsers/jira_parser
0 голосов
/ 11 февраля 2020

Хорошо, я разобрался - все, что мне нужно было сделать, это добавить -I source в файл .rspec, чтобы загрузить все протестированные классы. Так что в моем случае .rspec будет выглядеть так:

.rspec

--require spec_helper
-I source
0 голосов
/ 11 февраля 2020

Здравствуйте, я все еще довольно новичок, так что это может помочь, но я считаю, что вам нужно JiraParser

require 'jira_parser'
require 'jira_parser/parser'

Это может работать, но ошибка в том, что вы пытаетесь использовать парсер, который не доступен в вашем текущем коде.

...