Node.js jest js手动模拟链接方法

Node.js jest js手动模拟链接方法,node.js,npm,jestjs,unirest,Node.js,Npm,Jestjs,Unirest,我想用jest手动模拟npm模块unirest。我已经创建了一个\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu mocks,并在其中放置了unirest.js。我已经创建了post方法和headers方法,但我一直收到这个错误。如何创建这些链接方法并获得响应 TypeError:unirest.post(…)。标头不是函数 这是我的\uuuumocks\uuuu/unirest.js const unirest=jest.genMockFromModule('unires

我想用jest手动模拟npm模块unirest。我已经创建了一个
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu mocks
,并在其中放置了unirest.js。我已经创建了post方法和headers方法,但我一直收到这个错误。如何创建这些链接方法并获得响应

TypeError:unirest.post(…)。标头不是函数

这是我的
\uuuumocks\uuuu/unirest.js

const unirest=jest.genMockFromModule('unirest');
常数结果={
数据:“响应”
};
const myheaders={'Accept':'application/json','Content Type':'application/json'};
函数标题(标题){
header=myheaders;
返回头;
}
log('insideunirest promise mocker');
const post=opts=>新承诺((解决、拒绝)=>{
返回解析(结果);
});
unirest.post=post;
unirest.headers=标题
module.exports=unirest有两个选项:

  • 模拟测试的每个方法:这意味着,调用的第一个方法应该返回一个对象,该对象包含第二个方法的假定义,该对象返回第三个方法的定义,依此类推

  • 使用带有代理的模拟对象

让我们看看第一种方法:你会做这样的事情

const FOO = 'something useful for your tests'
const send = jest.fn().mockResolvedValue({ body: FOO })
const headers = jest.fn().mockReturnValue({ send })
const post = jest.fn().mockReturnValue({ headers })
jest.unirest = post
基本上,它是一个函数链:post返回一个带有函数
headers
的对象,该函数返回一个带有函数
send
的对象,该函数将解析(而不是返回-解析=>表示将返回值的承诺)到一个带有属性体的对象,该对象将解析为您想要的任何内容。也许您希望自定义每个测试。希望它能起到一般性的指导作用

允许您在调用未定义的内容时执行
get
方法。这将允许您链接您想要的任何方法,并且对于特定的
send
返回有用的内容。。应该是这样的:

const handler = {
  get: (obj) => {
    return obj
  } 
}

const send = jest.fn().mockResolvedValue({ body: FOO })
const target = { send } 
module.exports = new Proxy(target, handler)
基本上,无论何时调用unitest,它都会尝试在target中执行它。如果它存在,它将运行代码。否则,它将调用代理中的
get
函数,该函数基本上将返回对自身的引用(参数
obj
)。我没有使用过这种方法,但我相信它会起作用——你基本上是在
target
中模拟你所关心的函数,而对于其他函数,你只是“什么都不做”。如果有太多的链接,并且您不想对所有中间函数进行任何断言,那么这可能很有用

希望它能提供一些指导。

constfoo={body:'My response from API'};
函数结束(响应){
返回响应(Foo);
}
const send=req=>{
返回{end};
}
const headers=opt=>{
返回{send};
};
const post=url=>{
返回{headers};
};
log('Calling mock unirest');
module.exports={
岗位:岗位,,
标题:标题,
发送:发送,
完:完
}
const handler = {
  get: (obj) => {
    return obj
  } 
}

const send = jest.fn().mockResolvedValue({ body: FOO })
const target = { send } 
module.exports = new Proxy(target, handler)