Jest是Facebook创建的流行JavaScript测试框架。它被广泛用于测试JavaScript代码,包括应用程序,库和组件。 JEST为编写测试提供了易于使用和直观的API,并带有内置功能,例如测试跑步者,断言,模拟和代码覆盖范围报告。
安装
要开始,您需要在项目中安装Jest。您可以使用NPM或纱线安装它:
npm install --save-dev jest
或
yarn add --dev jest
安装了开玩笑后,您可以开始编写测试!
编写您的第一个测试
使用.test.js
或.spec.js
扩展名(例如mytest.test.js
)创建项目中的新文件。这个命名惯例允许开玩笑自动发现并运行您的测试。
在测试文件中,您可以使用Jest提供的test
或it
功能编写单个测试用例。这是一个基本示例:
// mytest.test.js
// Import the function you want to test
const { sum } = require('./myModule');
// Write a test case
test('adds 1 + 2 to equal 3', () => {
// Call the function being tested
const result = sum(1, 2);
// Assert the expected outcome
expect(result).toBe(3);
});
在此示例中,我们从模块导入sum
函数并编写测试用例以验证其行为。 expect
函数用于对被测试的代码产生的值做出断言。
运行测试
要运行测试,您可以使用以下命令:
npx jest
此命令告诉JEST查找与*.test.js
或*.spec.js
模式匹配的所有测试文件并执行它们。 JEST将提供测试结果的摘要,包括有关通过和失败测试的信息。
共同的匹配
Jest提供了广泛的匹配器,使您可以对代码产生的值做出断言。这是一些常用的匹配器:
-
toBe(value)
:断言一个值严格平等(===
)与预期值。 -
toEqual(value)
:断言一个值高于预期值。 -
toBeNull()
:断言一个值为null
。 -
toBeDefined()
:断言一个值不是undefined
。 -
toBeTruthy()
:断言一个值是真实的(不是null
,undefined
,false
,0
,NaN
或一个空字符串)。 -
toBeFalsy()
:断言一个值是虚假的(null
,undefined
,false
,0
,NaN
或一个空字符串)。 -
toContain(item)
:断言数组或字符串包含预期的项目。 -
toThrow(error)
:断言函数会引发错误。
这些只是Jest提供的匹配者的一些示例。您可以在Jest documentation中找到一个完整的列表。
嘲笑依赖
在许多情况下,您的代码可能取决于外部模块或API。 JEST允许您轻松模拟这些依赖项在测试过程中控制其行为。这是一个例子:
// myModule.js
// A function that fetches data from an API
async function fetchData() {
// ... implementation
}
// The main
function that uses fetchData
async function processData() {
const data = await fetchData();
// ... process the data
return processedData;
}
module.exports = { fetchData, processData };
// myModule.test.js
const { fetchData, processData } = require('./myModule');
jest.mock('./myModule', () => ({
fetchData: jest.fn(),
}));
test('processData calls fetchData and processes the data', async () => {
fetchData.mockResolvedValue('mocked data');
const result = await processData();
expect(fetchData).toHaveBeenCalled();
expect(result).toEqual('processed data');
});
在此示例中,我们使用jest.fn()
模拟fetchData
函数,并使用mockResolvedValue
为其提供解决值。然后,我们编写一个测试用例,以验证processData
函数调用fetchData
并正确处理数据。
测试异步代码
JEST提供了几种测试异步代码的机制,包括承诺,异步/等待和回调。这是使用异步/等待的示例:
// myModule.js
async function fetchData() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('data');
}, 1000);
});
}
module.exports = { fetchData };
// myModule.test.js
const { fetchData } = require('./myModule');
test('fetchData resolves with data', async () => {
const result = await fetchData();
expect(result).toEqual('data');
});
在此示例中,fetchData
函数返回了一个延迟1秒钟后用字符串'data'
解决的承诺。测试案例使用async/await
等待承诺解决,然后断言预期的结果。
代码覆盖范围
JEST提供内置的代码覆盖范围报告,使您可以查看测试涵盖多少代码。要启用代码覆盖范围,请在开玩笑时添加--coverage
标志:
npx jest --coverage
Jest将生成覆盖范围报告,显示哪些代码被测试涵盖,哪些不是。这有助于确定代码库缺乏测试覆盖的区域。
结论
本教程使用MARKDOWN涵盖了用JEST进行测试的基础知识。您学习了如何编写测试,使用匹配器进行断言,模拟依赖项,测试异步代码以及生成代码覆盖范围报告。 Jest提供了更多的测试功能和选项,因此我鼓励您探索official Jest documentation以获取更多深入的信息。
快乐测试!