我是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'
有人可以指出正确的方向来解决这个问题吗?