我使用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
为什么错误只在运行测试套件时发生?如何在不注解属性函数的情况下使测试通过?
1条答案
按热度按时间tmb3ates1#
通过将属性函数重构为以下内容,我在应用程序和测试中都取得了成功: