Node.js 如何使用jest模拟function.save()续集

Node.js 如何使用jest模拟function.save()续集,node.js,express,jestjs,mocking,sequelize.js,Node.js,Express,Jestjs,Mocking,Sequelize.js,我想用jest模拟sequelize中的function.save()。但是我在user.services.test.js文件中发现了一个代码错误。有人能帮我吗 错误表示:result.save()不是函数 user.services.test.js it('Should update user that input by ', async () => { let result; let data ; let dataInput = {

我想用jest模拟sequelize中的function.save()。但是我在user.services.test.js文件中发现了一个代码错误。有人能帮我吗

错误表示:result.save()不是函数

user.services.test.js

 it('Should update user that input by ', async () => {

        let result;
        let data ;
        let dataInput =  {id : 1, username : "teguh", userPassword : "apake"};        
        user.findByPk = jest.fn(() => {
            return {username : "teguh", userPassword : "iyah", save : mockFuntion()};
        });
        data = user.findByPk();
        data.userPassword = dataInput.userPassword;
        data.save = jest.fn(() => {return {saved:true}});

        result = await service.updateUser(dataInput);
        expect(data.save).toBeCalledTimes(1);
        expect(data.userPassword).toEqual(dataInput.userPassword);
    });
async updateUser(user){
        let result;
        try {
            const pass = bcrypt.hashSync(user.userPassword, 9);
            // result = await this.user.update({userPassword : pass}, {
            //     where : {username : user.username}
            // });

             result = await this.user.findByPk(user.id);
            if(result) {
                result.userPassword = pass;
                result.save();

                return result;
            }
        } catch (e) {
            logEvent.emit('APP_ERROR', {
                logTitle : '[UPDATE-USER-FAILED]',
                logMessage : e
            });

            throw new Error(e);
        }
    }
user.services.js

 it('Should update user that input by ', async () => {

        let result;
        let data ;
        let dataInput =  {id : 1, username : "teguh", userPassword : "apake"};        
        user.findByPk = jest.fn(() => {
            return {username : "teguh", userPassword : "iyah", save : mockFuntion()};
        });
        data = user.findByPk();
        data.userPassword = dataInput.userPassword;
        data.save = jest.fn(() => {return {saved:true}});

        result = await service.updateUser(dataInput);
        expect(data.save).toBeCalledTimes(1);
        expect(data.userPassword).toEqual(dataInput.userPassword);
    });
async updateUser(user){
        let result;
        try {
            const pass = bcrypt.hashSync(user.userPassword, 9);
            // result = await this.user.update({userPassword : pass}, {
            //     where : {username : user.username}
            // });

             result = await this.user.findByPk(user.id);
            if(result) {
                result.userPassword = pass;
                result.save();

                return result;
            }
        } catch (e) {
            logEvent.emit('APP_ERROR', {
                logTitle : '[UPDATE-USER-FAILED]',
                logMessage : e
            });

            throw new Error(e);
        }
    }

以下是一个工作示例:

user.services.ts

从“bcrypt”导入bcrypt;
const logEvent={emit(事件,有效负载){};
类用户服务{
用户;
构造函数(用户){
this.user=用户;
}
异步更新用户(用户){
让结果;
试一试{
const pass=bcrypt.hashSync(user.userPassword,9);
结果=等待this.user.findByPk(user.id);
如果(结果){
result.userPassword=pass;
等待结果。保存();
返回结果;
}
}捕获(e){
logEvent.emit('应用程序错误'{
日志标题:“[UPDATE-USER-FAILED]”,
logMessage:e,
});
抛出新错误(e);
}
}
}
导出{UserService};
user.services.test.ts

从“/user.services”导入{UserService};
描述('60468548',()=>{
它('应该通过',async()=>{
constdatainput={id:1,用户名:'teguh',用户密码:'apake'};
constUserModelInstanceMock={save:jest.fn()};
const userModelMock={findByPk:jest.fn().mockResolvedValueOnce(userModelInstanceMock)};
const userService=新的userService(userModelMock);
const actual=await userService.updateUser(数据输入);
expect(userModelMock.findByPk).toBeCalledWith(1);
expect(usermodelsinstancemock.save).toBeCalledTimes(1);
});
});
单元测试结果和覆盖率报告:

通过src/examples/stackoverflow/60468548/user.services.test.ts
60468548
✓ 应在(36毫秒)之前更新用户输入
------------------|----------|----------|----------|----------|-------------------|
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s|
------------------|----------|----------|----------|----------|-------------------|
所有文件| 84.62 | 50 | 66.67 | 84.62 ||
user.services.ts | 84.62 | 50 | 66.67 | 84.62 | 22,27|
------------------|----------|----------|----------|----------|-------------------|
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:2.78秒

如何编写测试以查看保存的数据是否正确?@cluness这是单元测试,而不是集成测试