RSpe c в простом классе с ошибкой: пожалуйста, сначала заглушите значение по умолчанию - PullRequest
0 голосов
/ 23 февраля 2020

Я хочу протестировать простой класс, который выполняет итерацию массива хэшей и возвращает только те, которые имеют статус Pending, которые были обновлены более 2 дней go.

fetch_pending.rb

  class FetchPending
    PROJECT_KEY = 'TPFJT'
    TWO_DAYS = Time.now - 2 * 24 * 60 * 60

    def call
      project.select do |issue|
        issue.fields.dig('status', 'name') == 'Pending' &&
          DateTime.parse(issue.fields.dig('updated')) < TWO_DAYS
      end
    end

    private

    def project
      @project ||= Jira::ProjectConnection.new(PROJECT_KEY).call
    end
  end

specs

RSpec.describe FetchPending do
  subject { described_class.new }

  let(:project_key) { 'TSW-123' }
  let(:project_hash) do
    [
      {
        'key': 'TP-47',
        'fields': {
          'status': {
            'name': 'Pending'
          },
          'assignee': {
            'name': 'michael.kelso',
            'emailAddress': 'michael.kelso@example.com'
          },
          'updated': '2020-02-19T13:20:50.539+0100'
        }
      }
    ]
  end
  let(:project) { instance_double(Jira::ProjectConnection) }

  before do
    allow(Jira::ProjectConnection).to receive(:new).with('TSW-123').and_return(project)
    allow(project).to receive(:call).and_return(project_hash)
  end

  it 'return project hash' do
    expect(subject.call).include(key[:'TP-47'])
  end

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

Failure/Error: expect(subject.call).include(key[:'TP-47'])

   #<Jira::ProjectConnection (class)> received :new with unexpected arguments
     expected: ("TSW-123")
          got: ("TPFJT")
    Please stub a default value first if message might be received with other args as well.

У меня такая же проблема в нескольких других спецификациях, как заглушка этой переменной ? я должен сделать то же самое TWO_DAYS?

1 Ответ

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

Фактический код передает FetchPending::ProjectKey в качестве аргумента Jira::ProjectConnection.new.

В своем тесте вы определяете переменную:

let(:project_key) { 'TSW-123' }

, но на самом деле это нигде не используется.

Простым решением было бы изменить

allow(Jira::ProjectConnection).to receive(:new).with('TSW-123').and_return(project)

на

allow(Jira::ProjectConnection).to receive(:new).with(described_class::PROJECT_KEY).and_return(project)
...