javascript – 如何模拟异步函数的返回值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何模拟异步函数的返回值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2065字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 如何模拟异步函数的返回值?](/upload/InfoBanner/zyjiaocheng/775/be98c65fd40746a1b3dde8c5e2e72fb1.jpg)
我正在尝试测试使用’easy-soap-request’库的函数.
我想模拟’soapRequest’函数返回的结果.
我已经尝试了this,但它没有用,我一直从外部API获取数据.
client.js
const soapRequest = require('easy-soap-request');
async function get_data(){
var response = await soapRequest(url, auth_headers) //this is what I want to mock
var result;
result = some_parsing_function(response); //this is what I want test
return result;
}
test.js
const client = require('../../client');
describe('get_data tests', () =>{
it('should test sth', function (done) {
var stubed = stub(client, 'soapRequest').returns('dummy value');
client.get_data().then((result) => {
//assertions
console.log(result) //result still has value from external service
done();
});
})
});
编辑:
所以我尝试使用sinon.fake(),如其中一个答案所示.
const client = require('../../client');
describe('get_data tests', () =>{
it('should test sth', function (done) {
var fake_soap = fake(async () => {
return 12345;
});
replace(cilent, 'soapRequest', fake_soap);
client.soapRequest().then((res) => {
console.log(res); // 12345
})
client.get_data().then((result) => {
//assertions
console.log(result) //still original value from external service
done();
});
})
});
解决方法:
在源文件中,soapRequest变量本身是一个不是命名导入(对象)的函数,因此不可能只依赖sinon.stub.
如果看一下easy-soap-request源代码,很明显,它会导出一个函数https://github.com/circa10a/easy-soap-request/blob/master/index.js#L14
根据我的经验,对于这种情况,可以通过添加如下所示的proxyquire来解决.
const proxyquire = require('proxyquire');
const sinon = require('sinon');
// we mock `easy-soap-request` (the library name) by using `sinon.stub`
const client = proxyquire('../../client', { 'easy-soap-request': sinon.stub().returns('dummy value') })
describe('get_data tests', () =>{
it('should test sth', async () => { // use async/await for better code
const result = await client.get_data();
console.log(result); // dummy value
})
});
如果你不想使用sinon,你也可以这样做
const client = proxyquire('../../client', { 'easy-soap-request': () => 'dummy value' })
参考:
https://www.npmjs.com/package/proxyquire
希望能帮助到你
内容总结
以上是互联网集市为您收集整理的javascript – 如何模拟异步函数的返回值?全部内容,希望文章能够帮你解决javascript – 如何模拟异步函数的返回值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。