#ruby-on-rails #ruby #unit-testing #rspec #axlsx
#ruby-on-rails #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. Я получаю ту же проблему.
2. Это
view
тест? Можете ли вы предоставить полную информацию для вашего теста, по крайней мере, о том, с чем он связан (перед блоками / let / describe)?3. Нет инструкций before / after /let . опишите блок следующим образом: опишите ‘report.xlsx.axlsx’, завершите фактическое имя файла ‘report.xlsx.axlsx’
Ответ №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_stringsn"
");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
Я не могу привести вам полный пример, потому что вы не опубликовали свой шаблон представления.
Вам также необходимо понять, как рендеринг работает с тестами просмотра, потому что ваш тест по-прежнему недействителен.