我正试图在TestCafe中设置一个自动化的ui测试。它分为三个部分。
UI部分(它是最后一个部分(很简单,不是问题。它正在确认和关闭已进入帐户的警报。但为了触发警报,我需要执行两个api发布请求。
第一个是登录并检索承载令牌。
第二种是使用承载令牌发布警报以进行授权。
如果我只发布登录请求,就会返回令牌。如果我在第二个请求中对承载令牌进行硬编码,它会完美工作。
我在谷歌上搜索了一下,试图找到任何帮助,以及唯一找到的关于顺序获取请求的建议。我已经尝试过了,但在这样做的过程中,第二个请求总是首先运行,然后测试在401响应中失败。
下面是我尝试运行的代码。如有任何建议,将不胜感激
let axios = require('axios');
var token = ''
let login = "http://url/login"
let alert = "http://url/alarm"
const firstRequest = axios.post(login ,
{
'email': 'email@gmail.com',
'password': 'pwd'
}
.then((response) => {
console.log(response)
token = response.data.token
return token
})
.catch(error => {
console.error(error)
}))
const secondRequest = axios.post(alert,
{
deviceId: 29152
},
{
headers:
{
'Authorization': `Bearer ${token}`
},
})
axios
.all ([firstRequest, secondRequest])
.then(
axios.spread((...responses) => {
const firstResponse = responses [0];
const secondResponse = responses [1];
console.log(firstResponse, secondResponse);
})
)
.catch(errors => {
console.error(errors)
});
@pavelsaman的解决方案是正确的。看起来axios.post
方法返回了一个普通的promise。这意味着您可以使用异步/等待方法,如下所示:
const firstResponse = await axios.post(login, { 'email': 'email@gmail.com', 'password': 'pwd' };
const token = response.data.token;
const secondResponse = await axios.post(alert, {
...
'Authorization': `Bearer ${token}`
},
})
或者,您可以使用Promise链接如下:
axios.post(login, { 'email': 'email@gmail.com', 'password': 'pwd' })
.then(response => {
const token = response.data.token;
return axios.post(alert, {
...
'Authorization': `Bearer ${token}`}
})