Nock headers - Error: Nock: No match for request
Nock headers - Error: Nock: No match for request
这是我的示例代码,出于某种原因,Nock 对我来说失败了,因为当添加 headers 时,它无法匹配 URL,当评论下面的代码时,测试通过。我不明白为什么 nock 不理解 headers,正如文档所说的那样,我已经这样做了:reqheaders: { 'authorization' : 'Basic Auth' }
希望有人能发现我正在做的一些奇怪的事情。
const axios = require('axios');
async function postAPI(params) {
let response1 = '';
try {
response1 = await axios.post('http://someurl/test2', params);
} catch(error) {
throw error;
}
try {
console.log("Im here", response1.data.sample)
const response = await axios.get('http://testurl/testing', {
// headers: {
// 'authorization' : 'Basic Auth' //+ response1.data.sample
// }
});
return response.data;
} catch(err) {
console.log("Error", err)
}
}
exports.postAPI = postAPI;
测试
it('make an api call - POST', async () => {
nock('http://someurl')
.persist()
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.post('/test2')
.reply(200, {
sample : 'test2'
});
const test = nock('http://testurl', {
// reqheaders: {
// 'authorization' : 'Basic Auth'
// }
})
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.get('/testing')
.reply(200, { data : 'test' });
const response = await postAPI();
console.log("XXXX", response)
expect(response.data).toEqual("test");
});
您的请求headers 必须与您在 axios 请求 headers 中传递的内容相匹配。
reqheaders: {
'authorization' : 'Basic Auth test2'
}
当你在 main 函数中连接授权 header 时,记得在 Auth 和 response1.data.sample 之间添加一个 space :)
'authorization' : 'Basic Auth ' + response1.data.sample
我试过你的代码,它有效。
完整测试:
const nock = require('nock');
const { postAPI } = require('./index');
const { expect } = require('chai');
describe('postapi', () => {
it('make an api call - POST', async () => {
nock('http://someurl')
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.post('/test2')
.reply(200, {
sample : 'test2'
});
nock('http://testurl', {
reqheaders: {
'authorization' : 'Basic Auth test2'
}
})
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.get('/testing')
.reply(200, { data : 'test' });
const response = await postAPI();
console.log("XXXX", response)
expect(response.data).to.be.eql("test");
});
});
这是我的示例代码,出于某种原因,Nock 对我来说失败了,因为当添加 headers 时,它无法匹配 URL,当评论下面的代码时,测试通过。我不明白为什么 nock 不理解 headers,正如文档所说的那样,我已经这样做了:reqheaders: { 'authorization' : 'Basic Auth' }
希望有人能发现我正在做的一些奇怪的事情。
const axios = require('axios');
async function postAPI(params) {
let response1 = '';
try {
response1 = await axios.post('http://someurl/test2', params);
} catch(error) {
throw error;
}
try {
console.log("Im here", response1.data.sample)
const response = await axios.get('http://testurl/testing', {
// headers: {
// 'authorization' : 'Basic Auth' //+ response1.data.sample
// }
});
return response.data;
} catch(err) {
console.log("Error", err)
}
}
exports.postAPI = postAPI;
测试
it('make an api call - POST', async () => {
nock('http://someurl')
.persist()
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.post('/test2')
.reply(200, {
sample : 'test2'
});
const test = nock('http://testurl', {
// reqheaders: {
// 'authorization' : 'Basic Auth'
// }
})
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.get('/testing')
.reply(200, { data : 'test' });
const response = await postAPI();
console.log("XXXX", response)
expect(response.data).toEqual("test");
});
您的请求headers 必须与您在 axios 请求 headers 中传递的内容相匹配。
reqheaders: {
'authorization' : 'Basic Auth test2'
}
当你在 main 函数中连接授权 header 时,记得在 Auth 和 response1.data.sample 之间添加一个 space :)
'authorization' : 'Basic Auth ' + response1.data.sample
我试过你的代码,它有效。 完整测试:
const nock = require('nock');
const { postAPI } = require('./index');
const { expect } = require('chai');
describe('postapi', () => {
it('make an api call - POST', async () => {
nock('http://someurl')
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.post('/test2')
.reply(200, {
sample : 'test2'
});
nock('http://testurl', {
reqheaders: {
'authorization' : 'Basic Auth test2'
}
})
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.get('/testing')
.reply(200, { data : 'test' });
const response = await postAPI();
console.log("XXXX", response)
expect(response.data).to.be.eql("test");
});
});