开玩笑 你的测试套件必须至少包含一个测试
Posted
技术标签:
【中文标题】开玩笑 你的测试套件必须至少包含一个测试【英文标题】:Jest Your test suite must contain at least one test 【发布时间】:2021-06-26 02:59:32 【问题描述】:我在./pages/test.js
有一个简单的测试文件
import React from 'react'
export default function HomePage ()
return (
<main>
<h1>Testing Next.js With Jest and React Testing Library</h1>
</main>
)
在./test/pages/index.test.js
中,我进行了以下简单测试,以检查我的页面是否正确呈现以及是否有标题
import React from 'react'
// Using render and screen from test-utils.js instead of
// @testing-library/react
import render, screen from '../test-utils'
import HomePage from '../../pages/test'
describe('HomePage', () =>
it('should render the heading', () =>
render(<HomePage />)
const heading = screen.getByText('Testing Next.js With Jest and React Testing Library')
// we can only use toBeInTheDocument because it was imported
// in the jest.setup.js and configured in jest.config.js
expect(heading).toBeInTheDocument()
)
)
运行测试后出现以下错误
FAIL pages/test.js
● Test suite failed to run
Your test suite must contain at least one test.
at onResult (node_modules/@jest/core/build/TestScheduler.js:175:18)
at node_modules/@jest/core/build/TestScheduler.js:304:17
at node_modules/emittery/index.js:260:13
at Array.map (<anonymous>)
at Emittery.Typed.emit (node_modules/emittery/index.js:258:23)
PASS test/pages/index.test.js
Test Suites: 1 failed, 1 passed, 2 total
Tests: 1 passed, 1 total
为什么开玩笑说我错过了考试?
【问题讨论】:
【参考方案1】:为什么开玩笑说我错过了考试?
因为 Jest 认为 pages/test.js
是一个测试文件。 Jest 使用以下正则表达式来检测测试文件。
(/__tests__/.*|(\\.|/)(test|spec))\\.[jt]sx?$
来自docs,
默认情况下,它会在
__tests__
文件夹中查找.js
、.jsx
、.ts
和.tsx
文件,以及任何后缀为.test
或.spec
的文件(例如@ 987654331@ 或Component.spec.js
)。它还会找到名为test.js
或spec.js
的文件。
一个简单的解决方案是重命名文件。
【讨论】:
我将test.js
重命名为simple.js
。然后我移动了文件,所以它的位置是./pages/__tests__/simple.js
。将HomePage
导入更改为import HomePage from '../../pages/__tests__/simple
后,我运行测试并得到与上述相同的错误。你能告诉我我做错了什么吗?
@dev_el 正如我在答案中提到的,Jest 假定 __tests__
中的所有文件都是测试文件。将simple.js
移出__tests__
目录。以上是关于开玩笑 你的测试套件必须至少包含一个测试的主要内容,如果未能解决你的问题,请参考以下文章
开玩笑:测试套件无法运行,SyntaxError:意外的令牌导入
开玩笑:测试套件无法运行(Expo SDK 需要 Expo 才能运行)