Rspec спросить, если публичный метод называет частный рубин на рельс - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь проверить, вызывает ли открытый метод create_file закрытый метод get_users, вызываемый в закрытом методе add_product_data

class UsersXmlGenerator
  attr_reader :data

  def initialize(data)
    @data = data
  end

  def create_file
    builder = ::Builder::XmlMarkup.new indent: 2
    builder.instruct!

builder.products do |xml|
  data.each do |pa|
    add_product_data(pa, xml)
  end


   end
  end


  private

  def add_product_data(pa, xml)
    xml.product_application do |xml|
      xml.users do |xml|
        get_users(pa).each do |user|
          xml.user do |xml|
            sections_for_user(user).each do |section|
              section.add_xml(xml)
            end
          end
        end
      end
    end
  end

  def get_users(pa)
    pa.users.order_by_user.select(&:set_data?)
  end
end

1 Ответ

0 голосов
/ 28 февраля 2019

Я бы сказал, что тестирование конкретной детали реализации является анти-паттерном и абсолютно бесполезным.Проведение неудачного теста после рефакторинга не имеет смысла, если результат остается верным.

Кроме того, я бы сделал следующее, чтобы проверить, вызывается ли определенный метод:

subject(:generator) { UsersXmlGenerator.new(data) }

before do
  allow(generator).to receive(:add_product_data).and_return_original
end

it 'calls `add_product_data`' do
  generator.create_file
  expect(generator).to have_received(:add_product_data)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...