使用 nock 和 mocha 测试身份验证时卡住
Posted
技术标签:
【中文标题】使用 nock 和 mocha 测试身份验证时卡住【英文标题】:Stuck while testing authentication using nock and mocha 【发布时间】:2019-02-17 13:20:06 【问题描述】:我正在为进行第三方 API 调用的应用编写单元测试。我正在使用 nock 来模拟 API 调用。 API 使用用户名和密码进行基本身份验证。
这是一个单元测试来验证用户,然后返回响应。
describe('Authentication tests', () =>
it('Authenticates user', (done) =>
nock('<MY_URL>')
.get('/api/now/table/test_table/test_sys_id')
.basicAuth(user: 'user', pass: 'pass')
.reply(200, 'a': 'b');
let snowClient = require('../Client');
snowClient = new snowClient('<MY_URL>', 'user', 'pass', 'application/json', 'application/json');
snowClient.getSingleRecord('test_table', 'test_sys_id', (response) =>
console.log(response);
expect(typeof response).to.be.a('string');
// expect(JSON.parse(response).a).to.equal('b');
done();
);
);
);
但是当我运行这个测试时,nock 会抛出以下错误:
Error: Nock: No match for request
"method": "GET",
"url": "<MY_URL>/api/now/table/test_table/test_sys_id",
"headers":
"accept": "application/json",
"content-type": "application/json",
"host": "<MY_URL>"
但是当我从 nock 中删除 .basicAuth()
时,它可以正常工作。我在这里想念什么?这是使用 nock 测试经过身份验证的 API 调用的正确方法吗?
编辑:
这里是getSingleRecord
的代码:
getSingleRecord(table, sysId, callback)
new Promise((resolve, reject) =>
var requestParams = utils.setRequestParamsWithoutBody(this.headers,
this.auth,
'GET',
utils.URLBuilder(this.instance, this.namespace, this.apiName, table, sysId));
request(requestParams, (err, res) =>
var errorMessage = this._handleErrors(res, err);
if (errorMessage)
return reject(errorMessage);
resolve(res.body);
);
).then((response) =>
callback(response);
).catch((error) =>
callback(error);
);
【问题讨论】:
【参考方案1】:我认为你不应该在it中使用nock,应该在describe的范围内使用它,我没有测试它,我只是研究它,认为它应该像这样工作。
describe('Authentication tests', () =>
let MY_URL = 'you url'
beforeEach(() =>
nock(MY_URL)
.get('/api/now/table/test_table/test_sys_id')
.basicAuth(user: 'user', pass: 'pass')
.reply(200, 'a': 'b');
);
it('Authenticates user', (done) =>
let snowClient = require('../Client');
snowClient = new snowClient(MY_URL, 'user', 'pass', 'application/json', 'application/json');
snowClient.getSingleRecord('test_table', 'test_sys_id', (response) =>
console.log(response);
expect(typeof response).to.be.a('string');
// expect(JSON.parse(response).a).to.equal('b');
done();
);
);
);
【讨论】:
以前我只在 beforeEach 中使用 nock,但它仍然给出同样的错误。 你能告诉我这个函数“snowClient.getSingleRecord”的定义吗以上是关于使用 nock 和 mocha 测试身份验证时卡住的主要内容,如果未能解决你的问题,请参考以下文章
使用 Mocha + supertest + passport 使用 JWT 测试经过身份验证的路由失败
“未检测到侦听器”验证错误 Mongoose 和 Mocha