在多个测试用例中使用JWT令牌mocha node-js



我如何创建一个可重复使用的函数,该函数给我一个JWT令牌,这样我就可以执行需要令牌的测试用例,而无需在每个测试用例文件中反复调用登录函数

account.js

describe("Account", () => {
var token;
describe("/POST Login", () => {
it("it should gives the token", (done) => {
chai.request(server)
.post('api/v1/account')
.set('Accept', 'application/json')
.send({ "email": "john@gmail.com", "password": "123456" })
.end((err, res) => {
res.should.have.status(200);
res.body.should.have.property("token");
token = res.body.token //----------------TOKEN SET

done();
});
});
});

describe("/GET account", () => {
it("it should get the user account", (done) => {
chai.request(server)
.get('api/v1/account')
.set('x-auth-token', token)
.end((err, res) => {
res.should.have.status(200);
done();
});
});
});
});

类别

describe("Category", () => {
var token;
//Login function duplicate in both the files
describe("/POST Login", () => {
it("it should gives the token", (done) => {
chai.request(server)
.post('api/v1/account')
.set('Accept', 'application/json')
.send({ "email": "john@gmail.com", "password": "123456" })
.end((err, res) => {
res.should.have.status(200);
res.body.should.have.property("token");
token = res.body.token //----------------TOKEN SET

done();
});
});
});

describe("/GET category", () => {
it("it should get the user account", (done) => {
chai.request(server)
.get('api/v1/account')
.set('x-auth-token', token)
.end((err, res) => {
res.should.have.status(200);
done();
});
});
});
});

我想从其他文件中获取令牌,并在不同的情况下使用。做到这一点的最佳方法是什么?

我的回答是基于您提到的单元测试这一事实。通常,在单元测试中,您测试的是一小部分功能。这意味着,你想在一个更大的组件/逻辑中测试一小段逻辑,而你对测试其他组件不感兴趣(例如,在测试API的情况下。你通常想测试的是,如果你收到API 200的成功响应,你的逻辑应该如何表现,或者如果你收到400或500的成功响应。我建议您使用nock这样的库来模拟API调用以进行测试:https://www.npmjs.com/package/nock

你试图实现它的方式可能会有点复杂。如果你想做这种测试,我不会选择jest/mocha作为测试选手。我会准备一个邮差收集(可能你已经有了(,然后我会利用newman来运行我的收集,并实际进行你想要的集成测试。您可以在这里进一步阅读:使用Newman 在命令行上运行集合

也有不同的方法,但上面的方法可能是一个很好的方法。

使用一个始终登录用户并生成可在新测试文件中使用的令牌的before hook。

let token;
before('Login user', async () => {
const response = await chai.request(server)
.post('api/v1/account')
.set('Accept', 'application/json')
.send({ "email": "john@gmail.com", "password": "123456" })
token = res.body.token; 
});

相关内容

  • 没有找到相关文章

最新更新