Cookies Cypress setCookie未按预期工作

Cookies Cypress setCookie未按预期工作,cookies,cypress,Cookies,Cypress,我添加了一个命令getCSRFToken,其他命令使用该命令获取CSRF令牌以向我的应用程序发出请求: Cypress.Commands.add(“getCSRFToken”,()=>{ cy.getCookie('XSRF-TOKEN')。然后((cookie)=>{ 如果(!cookie){ 返回cy.request('HEAD','/')) .its('标题') 。然后((标题)=>{ const-token=headers['x-xsrf-token']; 如果(!令牌){ 抛出新错误(

我添加了一个命令
getCSRFToken
,其他命令使用该命令获取CSRF令牌以向我的应用程序发出请求:

Cypress.Commands.add(“getCSRFToken”,()=>{
cy.getCookie('XSRF-TOKEN')。然后((cookie)=>{
如果(!cookie){
返回cy.request('HEAD','/'))
.its('标题')
。然后((标题)=>{
const-token=headers['x-xsrf-token'];
如果(!令牌){
抛出新错误(“未找到XSRF令牌”);
}
返回cy.setCookie('XSRF-TOKEN',TOKEN)
。然后(()=>令牌);
});
}
返回cookie.value;
});
});
发出
HEAD
请求的部分用于在测试中尚未访问任何页面时使用此功能,例如在发出
POST
请求以创建测试数据时

AFAICT这对我来说似乎应该是可行的,但是对
getCookie
的后续调用似乎实际上没有检索到任何内容:


我认为返回
setCookie
承诺和
getCookie
承诺可能会有所不同,但情况似乎并非如此。

默认情况下,Cypress会在每次测试运行之前清除所有cookie。他们有一个api来为下一个测试执行保存一个cookie,这是

回到您的用例,您可以在想要获取令牌的每个套件之前在套件级别调用Cypress.Cookies.preserveOnce('XSRF-TOKEN')。如果不想重复调用,可以将其移动到getCSRFToken命令中

Cypress.Commands.add("getCSRFToken", () => {
  Cypress.Cookies.preserveOnce('XSRF-TOKEN')
  cy.getCookie('XSRF-TOKEN').then((cookie) => {
    .....
  });
});