为了账号安全,请及时绑定邮箱和手机立即绑定

javascript单元测试 - 从玩笑虚拟模拟返回不同的对象

javascript单元测试 - 从玩笑虚拟模拟返回不同的对象

慕的地6264312 2021-10-14 17:38:22
我有一个使用虚拟模拟的笑话单元测试。虚拟模拟返回一个带有 apiName = "standard__abc" 的对象我测试了一个函数(isApiNameABC()),如果 apiName === "standard__abc" 则它使用模拟对象返回 true,否则它返回 false。使用下面的代码,我可以测试返回 true 的条件......我的问题是,如何修改我的测试代码,以便虚拟模拟为 apiName 返回一些其他值。我想这样做是为了测试 isApiNameABC() 返回 false 的情况。import * as utils from '../utils';jest.mock('mdl/appContextService', () => {    return {         appContext: {            apiName: "standard__abc"        }    }}, {virtual: true});describe("utils", () => {     test("test return value of apiName is EQUAL to standard__abc", () => {        expect(utils.isApiNameABC()).toEqual(true);          });});
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

apiName 只是模块导出的一个属性,因此您可以直接更改它。


假设utils.js看起来像这样:


import { appContext } from 'mdl/appContextService';


export const isApiNameABC = () => appContext.apiName === 'standard__abc';

你可以这样测试:


import * as utils from './utils';

import { appContext } from 'mdl/appContextService';


jest.mock('mdl/appContextService', () => {

  return {

    appContext: {

      apiName: "standard__abc"

    }

  }

}, { virtual: true });


describe("utils", () => {

  test("test return value of apiName is EQUAL to standard__abc", () => {

    expect(utils.isApiNameABC()).toEqual(true);  // Success!

  });

  test("test return value of apiName is NOT EQUAL to standard__abc", () => {

    const original = appContext.apiName;

    appContext.apiName = 'something else';  // <= change it directly

    expect(utils.isApiNameABC()).toEqual(false);  // Success!

    appContext.apiName = original;  // <= restore it

  });

});

如果apiName是函数,则可以使用模拟函数并更改其返回值:


import * as utils from './utils';

import { appContext } from 'mdl/appContextService';


jest.mock('mdl/appContextService', () => {

  return {

    appContext: {

      apiName: jest.fn(() => "standard__abc")  // <= use a mock function

    }

  }

}, { virtual: true });


describe("utils", () => {

  test("test return value of apiName is EQUAL to standard__abc", () => {

    expect(utils.isApiNameABC()).toEqual(true);  // Success!

  });

  test("test return value of apiName is NOT EQUAL to standard__abc", () => {

    appContext.apiName.mockReturnValue('something else');  // <= change the return value

    expect(utils.isApiNameABC()).toEqual(false);  // Success!

  });

});


查看完整回答
反对 回复 2021-10-14
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信