我正在为我的Node Js Express应用程序使用Jest编写测试用例。对于我的应用程序,我必须使用不同的角色(3个角色-Admin,Supervisor和Emp)来测试每个功能的执行情况。因此,我计划编写三个函数,这些函数在身份验证后返回令牌,例如getAdminToken,getSupervisorToken和getEmpToken。但是,当我尝试从函数调用中获取令牌时,我的测试用例总是失败。但是当我在测试功能中使用相同的方法时有效。
以下是我编写的方法,我希望为管理员角色返回一个有效的令牌,但这不起作用
async function getAdminToken() {
console.log("getAdminToken: Start");
loginToken = "";
const response = await
myApp.
post('/account/login/').
send({
"email":AdminTestAccount.GetInstance().Email,
"password":AdminTestAccount.GetInstance().Password
});
loginToken = response.body.Data.token;
console.log("getAdminToken: End");
return loginToken;
}
以下是 It 函数
it("test supervisor creation by admin", async (done) => {
//login as Admin role
if (loginToken == "") {
console.log("Before getting token");
loginToken = await getAdminToken();
console.log("After getting token: " + loginToken);
}
response = await
myApp.
post('/supervisor').
send({
"name":supervisor[0]
}).
set('Authorization', AdminTestAccount.GetBearerToken(loginToken));
expect(response.status).toBe(200);
expect(response.body.IsSuccessful).toBe(true);//**<--Test fails here**
expect(response.body.SuccessMessage).toBe("Supervisor created.");
expect(response.body.ReasonForFailure).toBe("");
expect(response.body.AdditionalInfo).toBe("");
expect(response.body.Data).toBe(supervisor[0]);
done();
});
但是上面的代码不起作用。相反,如果我将令牌功能作为 It 测试功能的一部分,则所有功能都可以正常工作。以下是有效的代码。
it("test team creation by admin", async (done) => {
var response = await
myApp.
post('/account/login/').
send({
"email":AdminTestAccount.GetInstance().Email,
"password":AdminTestAccount.GetInstance().Password
});
expect(response.status).toBe(200);
expect(response.body.IsSuccessful).toBe(true);
expect(response.body.Data._id).not.toBe("");
expect(response.body.Data.email).toBe(AdminTestAccount.GetInstance().Email);
expect(response.body.Data.roleId).toBe(AdminTestAccount.GetInstance().RoleId.toString());
expect(response.body.Data.token).not.toBeUndefined();
expect(response.body.Data.token).not.toBeNull();
expect(response.body.Data.token).not.toBe("");
loginToken = response.body.Data.token;
response = await
myApp.
post('/team').
send({
"name":supervisor[0]
}).
set('Authorization', AdminTestAccount.GetBearerToken(loginToken));
expect(response.status).toBe(200);
expect(response.body.IsSuccessful).toBe(true);
expect(response.body.SuccessMessage).toBe("supervisor created.");
expect(response.body.ReasonForFailure).toBe("");
expect(response.body.AdditionalInfo).toBe("");
expect(response.body.Data).toBe(supervisor[0]);
done();
});
您能协助我通过函数调用返回Token的代码中缺少的内容吗?
谢谢, 赫曼特。
答案 0 :(得分:0)
由于 supertest 期望 cookie 位于数组中,因此您必须返回数组中的 cookie。
return [loginToken]