gpt4 book ai didi

javascript - Cypress : How can we write GET request in with bearer token in cypress?

转载 作者:行者123 更新时间:2023-12-04 12:36:09 25 4
gpt4 key购买 nike

我有两个请求:一个是 POST 请求,另一个是 get。首先,我通过帖子获取用户访问 token ,而在其他情况下,我使用此 accessToken 登录。我的代码不起作用。
我正在使用窗口 7 和 cypress 3.3.5
我的代码:

var value;
describe("Login operation", () => {
it("Login Request with post method", () => {
cy.request({
method:'POST',
url:'https://odms.baitussalam.org:8445/api/v1/auth/login',
body: {
"userName": "faizanj",
"password": "abc"
}
})
.then(function(response){
this.value = response.body.accessToken;
console.log("Value "+this.value);

expect(response.body.name).to.equal('Faizan');
expect(response.status).to.equal(200);
});
});

it('Second test case', function() {

var authHeader='bearer ${'+this.value+'}';
const options = {
method: 'GET',
url: `https://odms.baitussalam.org:8445/api/v1/qurbani-representative`,
headers:{
authorization:authHeader,
}};

cy.request(options)
.then((response)=>{
expect(response.status).to.equal(200);6+9
});
});
});

最佳答案

问题是您尝试在测试用例之间使用变量集,当它已经重置以存储 token 时,您需要使用全局变量(不建议),或者创建一些登录命令,在您需要访问 token 之前调用该命令。例如:

Cypress.Commands.Add('login', (userName, password) => {
cy.request({
method:'POST',
url:'https://odms.baitussalam.org:8445/api/v1/auth/login',
body: {
userName,
password,
}
})
.as('loginResponse')
.then((response) => {
Cypress.env('token', response.body.accessToken); // either this or some global var but remember that this will only work in one test case
return response;
})
.its('status')
.should('eq', 200);
})
然后,每当您需要在使用 Cypress.env('token') 之前登录用户.
例如:
describe('testing token', () => {
beforeEach(() => {
cy.login();
});

it('test request', () => {
const token = Cypress.env('token');
const authorization = `bearer ${ token }`;
const options = {
method: 'GET',
url: `https://odms.baitussalam.org:8445/api/v1/qurbani-representative`,
headers: {
authorization,
}};

cy.request(options)
.its('status')
.should('eq', 200);
})
});
您可以更进一步并覆盖所有请求以向它们添加 token ,如下所示:
Cypress.Commands.overwrite('request', (originalFn, ...options) => {
const optionsObject = options[0];
const token = Cypress.env('token');

if (!!token && optionsObject === Object(optionsObject)) {
optionsObject.headers = {
authorization: 'Bearer ' + token,
...optionsObject.headers,
};

return originalFn(optionsObject);
}

return originalFn(...options);
});
那么上面的示例将如下所示:
describe('testing token', () => {
beforeEach(() => {
cy.login();
});

it('test request', () => {
cy.request(options)
.its('status')
.should('eq', 200);
})
});

关于javascript - Cypress : How can we write GET request in with bearer token in cypress?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61569780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com