Jest.js 为什么只有在运行测试套件时,我才会得到TypeError x is not a function?

4uqofj5v  于 2023-09-28  发布在  Jest
关注(0)|答案(1)|浏览(148)

我使用Create-React-App创建了一个react应用程序。我决定添加一个测试套件,并遵循使用库“testing-library/react”的指南。
我创建了以下测试:

import React from 'react';
import {render, screen} from '@testing-library/react';
import userEvent from '@testing-library/user-event'
import Login from '../../scenes/Account/Login';
import { BrowserRouter as Router } from 'react-router-dom'
import { ThemeProvider } from 'styled-components';
import { theme, store } from '../../config'
import '@testing-library/jest-dom';
import { Provider } from 'react-redux'

test('the connect button is disabled until a username and password is entered', async () => {
    render(<Router><ThemeProvider theme={theme}><Provider store={store}><Login /></Provider></ThemeProvider></Router>);

    const usernameInput = screen.getByRole('textbox');
    const passwordInput = screen.getByTestId('password')
    const connectButton = screen.getByRole('button', {  name: /connexion/i})
    
    expect(connectButton).toBeDisabled();

    await userEvent.type(usernameInput, 'test');
    expect(connectButton).toBeDisabled();
    
    await userEvent.type(passwordInput, 'test');

    expect(connectButton).toBeEnabled();
})

当我运行测试套件时,它给了我以下错误:TypeError: (0 , _Locale.translateAttribute) is not a function
如果我访问文件并注解使用translateAttribute函数的函数,测试通过了,但真实的应用程序失败了,因为现在很明显该函数不再存在了。

import t, { translateAttribute } from '../services/Locale'

export const attribute = translateAttribute(type) // Commenting this line make the test pass

下面是translateAttribute函数的定义:

export const translateAttribute = resource => (attribute, values = {}) => translate(`entities.${resource}.attributes.${snakeCase(attribute)}`, values)

我尝试像这样修改属性(使其成为一个函数):

export const attribute = () => translateAttribute(type)

之后,测试通过,应用程序编译,但文本没有正确翻译。(看起来它显示的是函数定义而不是翻译后的字符串)Not translated text
为什么错误只在运行测试套件时发生?如何在不注解属性函数的情况下使测试通过?

tmb3ates

tmb3ates1#

通过将属性函数重构为以下内容,我在应用程序和测试中都取得了成功:

export const attribute = (attribute, values) => translateAttribute(type)(attribute, values)

相关问题