我正在测试keystonejs(http://demo.keystonejs.com/)的登录页面,无法获得使用cypress成功的请求。没有cypress的登录请求具有以下请求标头:
而带有cypress测试的请求具有以下请求标头:
我能看到的唯一区别是没有在cypress测试请求中设置cookie。因此,请求获得403.我实际上使用的是该服务器的本地版本,其中我将电子邮件/密码配置为图像中的一个。演示站点使用该页面中提供的不同集合。
测试很简单:
describe('The Keystone Admin UI Signin Page', function () {
before(function() {
cy.visit('http://localhost:3000/keystone/signin')
})
it('should signin successfully with valid email/password', function () {
cy.get('#signin-view input[name=email]').clear().type('user@test.e2e');
cy.get('#signin-view input[name=password]').clear().type('test');
cy.get('#signin-view button[type=submit]').click();
cy.get('#react-root').should('be.visible');
})
})
无论如何要绕过这个?
答案 0 :(得分:1)
我知道这是一个比较老的问题,但是我会贴出来,以防它对任何人有帮助。
为我解决此问题的关键是赛普拉斯在每次测试(https://docs.cypress.io/api/commands/clearcookies.html#)之前都会清除所有cookie。
所以在上面的示例中(根据我的经验):
csrftoken
cookie csrftoken
cookie,因此出现错误要解决此问题,我必须在Cypress配置中将csrftoken
cookie列入白名单,这意味着它将免于此清除过程:
Cypress.Cookies.defaults({
whitelist: "csrftoken"
})
您可以在测试文件中内联执行此操作,但文档建议使用support
文件:
放置此配置的好地方是cypress / support / index.js文件,因为它是在评估任何测试文件之前加载的。
希望这会有所帮助,斯蒂芬。
答案 1 :(得分:0)
根据FlatSteve的答案,与Laravel一起使用,并使用更新的道具名称;
Cypress.Cookies.defaults({
preserve: ["XSRF-TOKEN", "your_laravel_session_name", "remember_token"]
});