我需要模拟客户端 HTTP 请求。我在客户端使用 isomorphic-fetch
并使用 mocha
和 nock
进行测试和模拟。我所有的客户请求都是基于相对路径的。因此,我无法为 nock
提供主机名。有解决办法吗。
客户端:
fetch('/foo') //hostname: http://localhost:8080
.then(res => res.json())
.then(data => console.log(data))
.catch(e => console.log(e))
测试套件
nock('/')
.get('/foo')
.reply(200, {data: "hello"})
这是失败的,因为我没有为 nock
提供正确的主机名。我做错了什么吗?
最佳答案
对于任何感兴趣的人:在我的 react/webpack 项目中,我通过在获取 url 前加上' http://localhost 来解决这个问题。 ' 当 NODE_ENV
设置为 'test'
时。
例子:
const testing = process.env.NODE_ENV === 'test';
const apiUrl = `${testing ? 'http://localhost' : ''}/api`;
function getStuffFromApi() {
return fetch(apiUrl, ...)
}
这样,在我的测试中,我总是可以像这样使用 nock:
nock('http://localhost')
.get('/api')
.reply(200, {data: 'hello'})
注意:运行我的测试时,NODE_ENV 设置为“测试”
关于javascript - 相对 URL 作为 Nock 中的主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34318341/