Зависимая от заглушки функция с sinon и proxyquire не печатает результат заглушки - PullRequest
0 голосов
/ 25 февраля 2019

Я написал модульный тест для _getuser (), но не вижу результата печати консоли.log. Также в тестовом покрытии показана строка 'let user = result.user;console.log ( 'User' + JSON.stringify (результат));»почему заглушка не печатается в консольном журнале в функции getUser () класса LogInCommand.Я вижу результат показывает неопределенный в модульном тесте.

// 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);
        });

    });

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Ниже код работал для меня // 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);
    });

});
0 голосов
/ 25 февраля 2019

Неправильная конфигурация прокси-сервера в ваших текущих настройках.Proxyquire отображает строковое значение, переданное в вызове require, на желаемые значения mock / stub.Вместо этого попробуйте следующее:

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