我几乎可以肯定这是我的错误,但我花了一整天的时间试图解决,我已经失败了。😞.
我尝试在node上配置fetch-mock来使用jest。我尝试了很多方法,最好的结果是:
https://user-images.githubusercontent.com/824198/50566568-7b49e400-0d22-11e9-884f-89720899de3a.png
我确信我的模拟是工作的,因为如果我通过参数传递给"Myclass.query",它会完美地工作。
我还确信mock已经到达我的测试文件,因为mock函数存在于fetch模块中。
但是......合在一起是行不通的。😭.
我创建了一个非常简单的小项目来观察这个问题的发生:
https://github.com/cesarjr/test-node-fetch
有人能帮帮我吗?
3条答案
按热度按时间hfwmuf9z1#
在测试过程中,只要需要
node-fetch
,Jest
就会使用__mocks__/node-fetch.js
处的模拟。问题是
fetch-mock
做的第一件事就是需要node-fetch
。这意味着,在此处的
config
上设置Request
时,没有定义它,因此在未定义的Request
上调用prototype
会在此处导致错误。比我聪明的人可能知道如何在
fetch-mock
需要node-fetch
的模拟中强制Jest
需要实际的node-fetch
,但从我所看到的来看,这似乎是不可能的。看起来你必须删除
__mocks__/node-fetch.js
处的mock,并将fetch
传递给你的代码,如下所示:myclass.js
...然后在测试中创建
sandbox
并将其传递给代码,如下所示:myclass.test.js
3b6akqbq2#
现在我找到了一种可靠的方法来合并fetch-mock和jesthttp://www.wheresrhys.co.uk/fetch-mock/#usageusage-with-jest
qnakjoqk3#
我遇到过类似的问题,一些
Date
函数被jest.fn
模拟,以避免在每个快照中出现今天的日期。根据上面的答案,我猜想jest自己在准备模仿这些方法之前,一定已经使用了这些方法。
在我的例子中,模拟实际上不需要是完整的jest模拟(即
jest.fn((...params...) => ...body...)
),只需一个普通的模拟函数就足够了(即(...params...) => ...body...
),所以修改这个就可以了。