Нужно смоделировать метод maxmind openSync для теста - PullRequest
0 голосов
/ 25 апреля 2019

Я новичок в nodeJs и должен написать контрольный пример для службы A, которая внутренне вызывает другой сервис B для разрешения имени страны по IP-адресу. Служба B использует двоичный файл maxmind mmdb для разрешения имени страны по IP-адресу, службы работают нормально, однако у меня возникли проблемы с подделкой моей службы B, потому что она загружает файл mmdb, и у меня нет двоичного файла mmdb при выполнении контрольного примера, поэтому я хочу издеваться над методом обслуживания, но я не могу его смоделировать, мой сервис B выглядит следующим образом

'use strict';

const geoip = require('maxmind');
const path = require('path');

const countryLookUp = geoip.openSync(path.join(__dirname, '../database/GeoLite2-Country.mmdb'));

module.exports.getCountryByIp = async (ipAddress) =>{
const result = await countryLookUp.get(ipAddress) || getDefaultValue();
return  { 
    code : result.country.iso_code,
    name :  result.country.names.en
}
}

function getDefaultValue() {
return {
country : {
    iso_code : "",
    names : {
        en: ""
        }
    }
}

Мой тестовый пример выглядит следующим образом:

"use strict";
const geoIP = require('./service/IpToGeoService');
describe("mock test", ()=>{
        const ipStub = sinon.stub(geoIP, "getCountryByIp");
        const countryData = {name:"", code:""};
        ipStub.returns(countryData);
});

Тестовые случаи завершаются с ошибкой: нет такого файла или каталога, откройте '/home/user/codebase/repos-name/src/database/GeoLite2-Country.mmdb'

Может кто-нибудь указать мне правильное направление, чтобы решить эту проблему.

...