通过JWT令牌在cypress中登录用户



我有一个场景,我需要调用多个api来获取访问密钥和秘密密钥,以获取AWS秘密管理器秘密密钥。然后使用这些密钥生成JWT令牌并登录用户。虽然我可以成功登录,但在此之后我编写的任何命令都会导致抛出异常。

CypressError: Cypress检测到您从命令,同时调用该承诺中的一个或多个cy命令。

代码:助手类:

generateTokenAndLogin(email: string) {
cy.request({
url: "https://xxx/get-access-key",
}).then((access) => {
this.accessKey = access.body.value;
cy.request({
url: "https://xxx/get-secret-key",
}).then((secret) => {
this.secretKey = secret.body.value;
//this is returning secret key correctly
this.getSecretKey().then((response) => {
//fetch secret from aws
cy.task("jwt", {
payload: {
email: email,
},
privateKey: response.SecretString as string,
}).then((token) => {
cy.visit(`myweb.com/login?id_token=${token}`);
});
});
});
});
}

内部module.exports

on('task', {
jwt(data: any) {
const token = jwt.sign(data.payload, data.privateKey, { algorithm: 'RS256', expiresIn: '1h'});
return token;
}
});

柏树测试:

describe('Testing', () => {
const jwtHelper = new JWTHelper();
before(()=> {
jwtHelper.generateToken();
})
it('JWT', () => {
cy.get('left-nav').should('be.visible'); //failing on all subsequent commands
});
});

在此之后没有任何命令时,表示Cypress登录功能成功,后续所有命令都失败。

可能是嵌套很深的cy.visit()导致了这个问题,您可以在错误消息体中检查。

如果是,请尝试将令牌保存为环境变量。

generateTokenAndLogin(email: string) {
cy.request('https://xxx/get-access-key').then((access) => {
this.accessKey = access.body.value;
cy.request('https://xxx/get-secret-key').then((secret) => {
this.secretKey = secret.body.value;
//this is returning secret key correctly
this.getSecretKey().then((response) => {
//fetch secret from aws
cy.task("jwt", {
payload: {
email: email,
},
privateKey: response.SecretString as string,
})
.then(token => Cypress.env('token', token))
});
});
});
}
const jwtHelper = new JWTHelper();
before(() => {
jwtHelper.generateToken();
})
beforeEach(() => {
cy.visit(`myweb.com/login?id_token=${Cypress.env('token')}`)
})
it('JWT', () => {
cy.get('left-nav').should('be.visible'); 
})

最新更新