Jest快照测试 - 在componentDidMount()中创建新对象时发生错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jest快照测试 - 在componentDidMount()中创建新对象时发生错误相关的知识,希望对你有一定的参考价值。

我有一个组件,其根DOM元素是<canvas>。我使用componentDidMount()方法在画布上绘制图像;但是,我正在使用第三方库,当测试尝试创建从该库派生的新对象时,我在测试期间收到以下错误:

TypeError: QR is not a constructor

QR是用于实例化对象的类的名称。这是我的组件(请注意,在运行应用程序时,没有关于QR对象的错误,它只在测试期间发生)。

QRCode.js:

import React, { Component } from 'react';
import * as QR from 'qrious';

export class QRCode extends Component {

    render(){
        return (
            <canvas className='QRCode'>
            </canvas>
        );
    };

    componentDidMount() {
        this.drawQRCode();
    }

    drawQRCode() {
        ...
        // the error is occuring here
        let qr = new QR({
            element: canvas,
            value: 'http://example.com/',
            size: canvasSize,
            level: 'H',
            foreground: '#2B2F2B'
        });
        ...
    }

}

QRCode.test.js:

import { QRCode } from './QRCode';
import renderer from 'react-test-renderer';

describe('QRCode', () => {

    it('renders correctly (snapshot test)', () => {
        const tree = renderer
            .create(<QRCode />)
            .toJSON();

        expect(tree).toMatchSnapshot();
    });

});

我尝试将import * as QR from 'qrious';添加到QRCode.test.js文件的顶部,但它没有任何区别。

答案

import * as QR from 'qrious'替换import QR from 'qrious'

编辑:

由于qrious没有默认导出,因此应更改为:

import { QRious } from 'qrious'

要么

import { QRious as QR } from 'qrious'

以上是关于Jest快照测试 - 在componentDidMount()中创建新对象时发生错误的主要内容,如果未能解决你的问题,请参考以下文章

在 react native 中使用 jest 和 Storybook 快照测试时出现问题

使用 Jest 手动模拟 React-Intl 进行快照测试

reactjs - jest 快照测试嵌套的 redux “连接”组件

Jest快照测试 - 在componentDidMount()中创建新对象时发生错误

react-native-vector-icons/MaterialIcons jest-expo 快照测试错误与打字稿

创建快照时 Jest/Enzyme ShallowWrapper 为空