需要模拟maxmind openSync方法进行测试

时间:2019-04-25 11:37:35

标签: node.js sinon chai maxmind

我是nodeJ的新手,必须为服务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'

有人可以指出正确的方向来解决这个问题吗?

0 个答案:

没有答案