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

我有一个使用虚拟模拟的笑话单元测试。


虚拟模拟返回一个带有 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);      

    });

});


慕的地6264312
浏览 168回答 1
1回答

慕村9548890

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', () => {&nbsp; return {&nbsp; &nbsp; appContext: {&nbsp; &nbsp; &nbsp; apiName: "standard__abc"&nbsp; &nbsp; }&nbsp; }}, { virtual: true });describe("utils", () => {&nbsp; test("test return value of apiName is EQUAL to standard__abc", () => {&nbsp; &nbsp; expect(utils.isApiNameABC()).toEqual(true);&nbsp; // Success!&nbsp; });&nbsp; test("test return value of apiName is NOT EQUAL to standard__abc", () => {&nbsp; &nbsp; const original = appContext.apiName;&nbsp; &nbsp; appContext.apiName = 'something else';&nbsp; // <= change it directly&nbsp; &nbsp; expect(utils.isApiNameABC()).toEqual(false);&nbsp; // Success!&nbsp; &nbsp; appContext.apiName = original;&nbsp; // <= restore it&nbsp; });});如果apiName是函数,则可以使用模拟函数并更改其返回值:import * as utils from './utils';import { appContext } from 'mdl/appContextService';jest.mock('mdl/appContextService', () => {&nbsp; return {&nbsp; &nbsp; appContext: {&nbsp; &nbsp; &nbsp; apiName: jest.fn(() => "standard__abc")&nbsp; // <= use a mock function&nbsp; &nbsp; }&nbsp; }}, { virtual: true });describe("utils", () => {&nbsp; test("test return value of apiName is EQUAL to standard__abc", () => {&nbsp; &nbsp; expect(utils.isApiNameABC()).toEqual(true);&nbsp; // Success!&nbsp; });&nbsp; test("test return value of apiName is NOT EQUAL to standard__abc", () => {&nbsp; &nbsp; appContext.apiName.mockReturnValue('something else');&nbsp; // <= change the return value&nbsp; &nbsp; expect(utils.isApiNameABC()).toEqual(false);&nbsp; // Success!&nbsp; });});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript