Node.js mock实现后的unck函数

Node.js mock实现后的unck函数,node.js,jestjs,Node.js,Jestjs,我在卸载函数时遇到了一些问题 我先是嘲笑它,现在我无法解开它 //myClass.js class myClass { static check(v1,v2) { return v1 > v2; } static async getinfo(v1,v2) { if (this.check(v1,v2)) { return await get('api.google.com'); }

我在卸载函数时遇到了一些问题

我先是嘲笑它,现在我无法解开它

//myClass.js
class myClass {

    static check(v1,v2) {
        return v1 > v2;
    }

    static async getinfo(v1,v2) {
        if (this.check(v1,v2)) {
            return await get('api.google.com');
        }
        return [];
    }
}


//myclass.spec.js
describe('Testing myClass', () => {
    describe('testing processing', () => {
        it('should return result', () => {
              const mockPatch = jest.fn().mockImplementation((version, solution) => false);
              myClass.check = mockCheck;
              try {
                const result = await myClass.getinfo(1,2);
                expect(result).toBe.([]);
              }catch(e) {
                throw e;
              }
        })
    })
    describe('Testing check', () => {
        it('should return true', () => {
            expect(myClass.check(2,1)).toBe.true
        })
    })
})
我已经试过了

myClass.check.mockRestore()

beforeach(()=>{myClass.check.mockRestore()})

jest.unmack('./myClass.js)


我能解决这个问题吗?我阅读了所有的jest文档,但找不到任何东西。我假设您希望做的是模拟一个实现,以便在特定测试中使用,但随后让您的其他测试在没有模拟的情况下运行

如果是这样的话,我想你可以结合使用


确保在测试顶部导入模块,然后使用相同的路径调用
jest.mock
。在此之后,您应该能够调用
myClass.check.mockReturnValueOnce
,它将被模拟,直到下次调用它为止。在那之后,它将正常工作方法永远不应该通过重新分配它们来模仿,Jest无法通过这种方式恢复它们原来的实现

这应始终使用
spyOn

jest.spyOn(myClass, 'check').mockReturnValue(false)

这样,可以使用
restoreMock
restoreAllMocks
还原方法。最好在中全局启用此功能。

您能描述一下您在测试中尝试执行的操作吗?我想有一种比你希望在这里做的更好的方法,我想对
check
函数的可能响应进行单元测试。你认为我应该怎么做?这是在模拟所有模块,现在我发现
myClass.getinfo是未定义的
在做第一个测试时。我在同一个测试中尝试了restoreMock,但它没有工作,但在cfg文件中它工作正常。泰!