引言是
#javascript #初学者 #测试 #jest

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提供的testit功能编写单个测试用例。这是一个基本示例:

// 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():断言一个值是真实的(不是nullundefinedfalse0NaN或一个空字符串)。
  • toBeFalsy():断言一个值是虚假的(nullundefinedfalse0NaN或一个空字符串)。
  • 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以获取更多深入的信息。

快乐测试!