Ошибка юнит тестирования 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
Как вы можете видеть, вы не можете заглушить это, но вы можете немного изменить свой тест:
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
Я не могу дать вам полный пример, потому что вы не разместили свой шаблон представления. Вам также нужно понять, как работает рендеринг с тестами представления, потому что ваш тест все еще недействителен.