【问题标题】:Stub dependent function with sinon and proxyquire does not print stub result带有 sinon 和 proxyquire 的存根依赖函数不打印存根结果
【发布时间】:2019-02-25 22:52:47
【问题描述】:

我为 _getuser() 编写了一个单元测试,但我没有看到 console.log 打印存根结果。此外,测试覆盖率显示行 'let user = result.user; console.log('用户'+JSON.stringify(result));'未发现。为什么在 LogInCommand 类的 getUser() 函数的控制台日志中不打印存根结果。 我看到结果在单元测试中显示未定义。

// userApi.js

    'use strict';
    const config = require('../../config/config');
    const api = require('./apiService');

    class UserApi {
        constructor() {
        }
        getUser(userId) {
            return api.get({
                url: config.url,
                qs: {
                    includeInactive: true,
                    id: userId,
                    startIndex: 0,
                    maxResults: 1
                },
                headers: {
                    Accept: 'application/json;',
                    'Connection': 'Keep-Alive'
                }
            });
        }

    }
    module.exports = UserApi;

    // LoginCommand.js

    'use restrict';

    const userApi = require('../../api/userApi');
    class LogInCommand {
        constructor() {
        }
        async _getUser(userId) {
            let result = await new userApi().getUser(userId);
            let user = result.user;
            console.log('User'+JSON.stringify(result));
            return user;
        }

    }

    module.exports = LogInCommand;

    //LoginCommand.test.js
    describe('Test LogInCommand Class',function(){
      it.only('_getUser function should return user',    async ()=> { 
            let apiData= {
                user:'abc'
            };
          let logincmd = proxyquire('../LogInCommand.js', {
                userApi : { getUser : Promise.resolve(apiData) },'@noCallThru':true});
            let obj= new logincmd();
            let result= await obj._getUser(client);
        });

    });

【问题讨论】:

    标签: javascript node.js unit-testing mocha.js sinon-chai


    【解决方案1】:

    您当前的设置中的 proxyquire 配置不正确。 Proxyquire 将在 require 调用中传递的字符串值映射到所需的模拟/存根值。请尝试以下方法:

    let logincmd = proxyquire('../LogInCommand.js', {
      '../../api/userApi' : { getUser : Promise.resolve(apiData) },
      '@noCallThru':true
    });
    

    【讨论】:

    • 感谢您的帮助,您的建议对我进行了一些代码更改
    【解决方案2】:

    以下代码对我有用 // userApi.js

    'use strict';
    const config = require('../../config/config');
    const api = require('./apiService');
    
    class UserApi {
        constructor() {
        }
        getUser(userId) {
            return api.get({
                url: config.url,
                qs: {
                    includeInactive: true,
                    id: userId,
                    startIndex: 0,
                    maxResults: 1
                },
                headers: {
                    Accept: 'application/json;',
                    'Connection': 'Keep-Alive'
                }
            });
        }
    
    }
    module.exports = UserApi;
    
    // LoginCommand.js
    
    'use restrict';
    
    const userApi = require('../../api/userApi');
    class LogInCommand {
        constructor() {
        }
        async _getUser(userId) {
            let result = await new userApi().getUser(userId);
            let user = result.user;
            console.log('User'+JSON.stringify(result));
            return user;
        }
    
    }
    
    module.exports = LogInCommand;
    
    //LoginCommand.test.js
    describe('Test LogInCommand Class',function(){
      it.only('_getUser function should return user',    async ()=> { 
            class userApiStub{
            constructor(){}
            getUser() {
                return  Promise.resolve({
                    user:4
                });
            }
        }
          let logincmd = proxyquire('../LogInCommand.js', {
                '../../api/userApi' :userApiStub },'@noCallThru':true});
            let obj= new logincmd();
            let result= await obj._getUser(client);
        });
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 2018-05-05
      • 2021-02-16
      • 1970-01-01
      • 2018-11-22
      • 2020-03-29
      相关资源
      最近更新 更多