Минитест Rails проверяет, была ли создана запись — ArgumentError: неправильное количество аргументов

У меня есть простой сервис, который создает запись с именем PropertyReport:

#app/services/portfolios/related_property_reports.rb
module Portfolios
  class RelatedPropertyReports
    def initialize(portfolio, portfolio_report)
      @portfolio = portfolio
      @portfolio_report = portfolio_report
    end

    def call
      PropertyReport.create!(
        property: property,
        portfolio_report: portfolio_report,
      )
    end
  end
end

Теперь я хочу протестировать эту службу, используя минитест ниже:

#app/services/portfolios/related_property_reports_test.rb

require 'test_helper'

module Portfolios
  class RelatedPropertyReports < ActiveSupport::TestCase
    setup do
      @portfolio = Portfolio.create(name: Faker::Bank.name)
      @property = Property.create(portfolio: @portfolio, name: Faker::Bank.name, status: 'planned')
      @portfolio_report = PortfolioReport.create(portfolio: @portfolio)
    end

    test 'create new record' do
      service.call
      assert_equal 1, PropertyReport.count
    end

    private

    def service
      @service ||= ::Portfolios::RelatedPropertyReports.new(@portfolio, @portfolio_report)
    end
  end
end

Что дает мне ошибку:

Portfolios::RelatedPropertyReports#test_create_new_record: ArgumentError: неправильное количество аргументов (дано 2, ожидается 1)

Очень странно, учитывая, что я даю два аргумента внутри new. Что я пропустил?


person mr_muscle    schedule 21.05.2021    source источник
comment
пожалуйста, предоставьте всю трассировку стека   -  person drruruu    schedule 21.05.2021


Ответы (1)


вам нужно использовать другое имя класса или модуль для вашего тестового класса. Прямо сейчас вы переопределяете исходный объект класса.

irb(main):001:1* module Test
irb(main):002:2*   class Test
irb(main):003:3*     def initialize(a, b)
irb(main):004:2*     end
irb(main):005:1*   end
irb(main):006:0> end
=> :initialize
irb(main):007:1* module Test
irb(main):008:2*   class Test
irb(main):009:3*     def initialize(a)
irb(main):010:2*     end
irb(main):011:3*     def service
irb(main):012:3*       ::Test::Test.new(1,2)
irb(main):013:2*     end
irb(main):014:1*   end
irb(main):015:0> end
=> :service
irb(main):016:0> Test::Test.new(1).service
(irb):9:in `initialize': wrong number of arguments (given 2, expected 1) (ArgumentError)
        from (irb):12:in `new'
        from (irb):12:in `service'
        from (irb):16:in `<main>'
        from /home/drewb/.rubies/ruby-3.0.1/lib/ruby/gems/3.0.0/gems/irb-1.3.5/exe/irb:11:in `<top (required)>'
        from /home/drewb/.rubies/ruby-3.0.1/bin/irb:23:in `load'
        from /home/drewb/.rubies/ruby-3.0.1/bin/irb:23:in `<main>'
person drruruu    schedule 21.05.2021