51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 634|回复: 0

[转贴] 前端自动化测试框架Jest中的Mock

[复制链接]
  • TA的每日心情
    无聊
    4 小时前
  • 签到天数: 932 天

    连续签到: 4 天

    [LV.10]测试总司令

    发表于 2022-6-29 11:12:17 | 显示全部楼层 |阅读模式
    函数的 Mock
      在我们的项目中,一个模块的方法内通常会去调用另外一个模块的方法。
      在测试时,我们可能并不需要关心方法内部的执行过程和结果,只想知道它是否被正确调用即可,此时,就需要用到Jest的使用Mock函数了。
      Mock 函数提供的以下三种特性,在我们写测试代码时十分有用:
      ·捕获函数调用情况
      · 设置函数返回值
      · 改变函数的内部实现
      测试函数是否被正常调用
    首先定义一个函数,用来执行传入的回调,然后导出:
    // index.js

    export const runCallback = callback => {
      callback();
    };

     然后我们需要这样测试:

    1. // index.test.js

    2. import { runCallback } from "./index";

    3. test("测试 runCallback", () => {
    4.   const func = jest.fn(); // 生成 mock 函数,捕获函数的调用
    5.   runCallback(func); // 调用 mock 函数
    6.   expect(func).toBeCalled(); // toBeCalled 匹配器用来检查函数是否被调用过
    7. });
    复制代码
    测试函数调用次数是否正确
      首先定义一个函数,用来执行传入的回调,然后导出:
    1. // index.js

    2. export const runCallback = callback => {
    3.   callback();
    4. };
    复制代码
    然后我们需要这样测试:
    1. // index.test.js

    2. import { runCallback } from "./index";

    3. test("测试调用次数", () => {
    4.   const func = jest.fn(); // 生成 mock 函数,捕获函数的调用
    5.   runCallback(func); // 第一次调用 mock 函数
    6.   runCallback(func); // 第二次调用 mock 函数
    7.   runCallback(func); // 第三次调用 mock 函数
    8.   expect(func.mock.calls.length).toBe(3); // 检查函数是否被调用了三次
    9. });
    复制代码
     测试函数是否返回 undefined
      首先定义一个函数,用来执行传入的回调,然后导出:
    1. // index.js

    2. export const runCallback = callback => {
    3.   callback();
    4. };
    复制代码
    然后我们需要这样测试:
    1. // index.test.js

    2. import { runCallback } from "./index";

    3. test("测试返回值", () => {
    4. const func = jest.fn(); // 生成 mock 函数,捕获函数的调用
    5.   expect(runCallback(func)).toBeUndefined(); // 检查函数是否返回 undefined
    6. });
    复制代码





    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-18 13:25 , Processed in 0.065667 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表