0

我尝试用 sinon js 存根导入,实际上如何做到这一点, import XLSX from 'xlsx' beforeEach(() => sinon.stub(sheetJS).resolve({}))- 对我不起作用,我发现错误resolve is not a function

 export default (data, sheetName, bookType = OutputFormats.xlsx) =>
import('xlsx').then(XLSX => {
    /* create worksheet from data */
    const ws = XLSX.utils.json_to_sheet(data, {cellStyles: true})

    /* create new workbook and add worksheet */
    const wb = XLSX.utils.book_new()
    XLSX.utils.book_append_sheet(wb, ws, sheetName)

    /* generate with and height of cells in .xlsx file */
    const wscols = Object.keys(data[0]).map(key => key = {wch: key.length + 2})

    const wsrows = new Array(data.length).fill({hpt: 24})
    ws['!cols'] = wscols
    ws['!rows'] = wsrows

    /* write a workbook */
    const wbout = XLSX.write(wb, {bookType, bookSST:true, type: 'binary'})

    /* creates a DOMString containing a URL */
    let url = window.URL.createObjectURL(new Blob([encodeWorkBook(wbout)], {type:'application/octet-stream'}))

    file.download(url, `import.${bookType}`)
})
4

1 回答 1

0
import XSLX from 'xlsx'

import exportToExcel, {encodeWorkBook} from '../../src/utils/exportToExcel'
import file from '../../src/utils/file'
import OutputFormats from '../../src/constants/outputFormats'




describe('exportToExcel', () => {
        beforeEach(() => {
            sinon.stub(XSLX.utils, 'json_to_sheet').withArgs(devices, {cellStyles: true}).returns({})
            sinon.stub(XSLX.utils, 'book_new').returns({})
            sinon.stub(XSLX.utils, 'book_append_sheet').withArgs({},{}, sheetName)
            sinon.stub(XSLX, 'write').returns(workBook)
            window.URL.createObjectURL = sinon.stub().returns(url)
            file.download = sinon.spy()
        })

        afterEach(() => {
            XSLX.utils.json_to_sheet.restore()
            XSLX.utils.book_new.restore()
            XSLX.utils.book_append_sheet.restore()
            XSLX.write.restore()
        })

        it('should call download with correct url and output extension', async () => {
            Object.values(OutputFormats).forEach(async format => {
                await exportToExcel(devices, sheetName, format)

                file.download.args[0][0].should.equal(url)
                file.download.args[0][1].should.equal(`import.${format}`)
                file.download.calledOnce.should.be.true
            })
        })

        it('should call download with default output extension', async () => {
            await exportToExcel(devices, sheetName)

            file.download.args[0][1].should.equal(`import.${OutputFormats.xlsx}`)
        })
    })
于 2018-02-13T21:55:22.673 回答