如何在笑话中测试模拟函数的返回值

时间:2018-07-20 14:33:08

标签: reactjs testing jestjs

我想用笑话来测试模拟函数的返回值。

在下面的代码中,我想模拟fs模块的mkdirSync函数

const fs = require("fs");


describe("Testing mock fs.mkdirSync", () => {
    fs.mkdirSync = jest.fn().mockReturnValue(5);
    fs.mkdirSync("./apple");

    it("fs.mkdirSync must have been called", () => {
        expect(fs.mkdirSync).toHaveBeenCalled();
    });

    //This test fails with TypeError: Cannot read property '0' of undefined

    it("fs.mkdirSync last return value must be 5", () => {
        expect(fs.mkdirSync.mock.results[0].value).toBe(5);
    });



});

第二次测试失败并出现TypeError:无法读取未定义的属性“ 0”

2 个答案:

答案 0 :(得分:2)

为什么要测试一个开玩笑的模拟函数的返回值?此时,您正在测试jest

您可以将fs.mkdirSync分配给变量并测试该值,因为它是返回值:

const result = fs.mkdirSync("./apple");
it("fs.mkdirSync last return value must be 5", () => {
    expect(result).toBe(5);
});

答案 1 :(得分:0)

您的代码是正确的,但是您开玩笑的安装是过时的版本。

将测试复制粘贴到新的create-react-app样板中并运行玩笑会导致问题中描述的行为。

运行npm install jest --save-dev以安装最新版本的jest。

现在开玩笑会导致两个测试通过。