赛普拉斯-为所有XHR请求添加自定义标头

时间:2019-03-01 04:06:19

标签: javascript typescript testing cypress

我注意到对于从被测应用程序触发的所有XHR请求,测试之间都删除了X-CSRFToken头。我不确定要保留此标头,因为我已经通过Cypress.Cookies.preserveOnce('sessionid', 'csrftoken')

保留了Cookie。

因此,我想到了将自定义标头X-CSRFToken附加到来自应用程序的所有XHR请求中。这是我使用的脚本,在这里我从Cookie提取csrftoken并将其设置为自定义标头。

cy.server({
   onAnyRequest: function(route, proxy) {
        proxy.xhr.setRequestHeader('X-CSRFToken', cy.getCookie('csrftoken'));
   }
})

在这里,我遇到以下错误,

Argument of type '{ onAnyRequest: (route: any, proxy: any) => void; }' is not assignable to parameter of type 'Partial<ServerOptions>'.
  Object literal may only specify known properties, and 'onAnyRequest' does not exist in type 'Partial<ServerOptions>'.

我希望对此方法有一个可行的解决方案,或者是更好的解决方案。

4 个答案:

答案 0 :(得分:4)

现在 cy.server 已弃用,您可以使用 cy.intercept 代替:

cy.intercept('http://api.company.com/', (req) => {
  req.headers['authorization'] = `token ${token}`
})

docs 中有更多信息。

答案 1 :(得分:3)

在beforeEach语句中运行代码。

beforeEach(() => {
    cy.server({
        onAnyRequest: function(route, proxy) {
           proxy.xhr.setRequestHeader('X-CSRFToken', cy.getCookie('csrftoken'));
       }
    })
});

答案 2 :(得分:1)

为了让大家都知道,我与Cypress的创建者进行了交流,并了解到传出请求的存根正在开发中,可以在-https://github.com/cypress-io/cypress/issues/687

下进行跟踪

答案 3 :(得分:0)

我认为您正在寻找的是onRequest而不是onAnyRequestHere's the documentation for cy.server options