Ошибка юнит тестирования Ruby Rspec AXLSX

Вот мой код

wb = xlsx_package.workbook
wb.add_worksheet(name: 'my_work_sheet') do |sheet|
   sheet.add_row ['first row']
end

Я написал модульный тест для кода выше. Вот:

it 'should write data in file' do
    workbook = double('Workbook')
    worksheet = double('Worksheet')

    expect(xlsx_package).to receive(:workbook).and_return(workbook)
    expect(workbook).to receive(:add_worksheet).with(name: 'my_work_sheet').and_return(worksheet)
    expect(worksheet).to receive(:add_row).with(['first row'])
end

Я получаю сообщение об ошибке "xlsx_package" не найден

1 ответ

Вот как xlsx_package назначено:

def self.call(template)
  "xlsx_author = defined?(xlsx_author).nil? ? nil : xlsx_author;\n" +
  "xlsx_created_at = defined?(xlsx_created_at).nil? ? nil : xlsx_created_at;\n" +
  "xlsx_use_shared_strings = defined?(xlsx_use_shared_strings).nil? ? nil : xlsx_use_shared_strings;\n" +
  "xlsx_package = Axlsx::Package.new(\n" +
    ":author => xlsx_author,\n" +
    ":created_at => xlsx_created_at,\n" +
    ":use_shared_strings => xlsx_use_shared_strings\n" +
    ");\n" +
  template.source +
  ";\nxlsx_package.to_stream.string;"
end

https://github.com/straydogstudio/axlsx_rails/blob/afdcf7266b91f3d70c640209702257a635afddc4/lib/axlsx_rails/template_handler.rb#L13

Как вы можете видеть, вы не можете заглушить это, но вы можете немного изменить свой тест:

it 'should write data in file' do
  workbook = double('Workbook')
  worksheet = double('Worksheet')
  xlsx_package = double('Package', workbook: workbook)

  expect(Axlsx::Package).to receive(:new).and_return(xlsx_package)

  expect(xlsx_package).to receive(:workbook).and_return(workbook)
  expect(workbook).to receive(:add_worksheet).with(name: 'my_work_sheet').and_return(worksheet)
  expect(worksheet).to receive(:add_row).with(['first row'])
end

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

Другие вопросы по тегам