我继承了使用依赖于OAuth的Node.js Web应用程序。每当您访问页面时,应用程序都会确保您已通过身份验证。请注意,这里没有Angular,React,Vue等。每个页面都是HTML格式。
我想使用Cypress测试此站点。我的问题是,我无法通过auth提供程序进行初始重定向。赛普拉斯确认OAuth is a challenge。
commands.js
Cypress.Commands.add('login', (credentials) => {
var settings = {
'clientId':'<id>',
'scope':'<scope-list>',
...
};
var body = `client_id=${settings.clientId}&scope=${settings.scope}...`;
var requestOptions = {
method: 'POST',
url: 'https://login.microsoftonline.com/...',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: body
}
cy.request(requestOptions);
});
然后,在我的测试中,我有:
context('Home', () => {
it('Visits Successfully', () => {
cy.login();
cy.title().should('include', 'welcome');
});
});
在测试运行器中,我看到正在发生登录POST请求。我确认正在使用console.log
接收访问令牌,但是我的标题为空。就像Cypress中未发生OAuth之后的重定向。但是,当我在浏览器中访问该网站时,重定向正在按预期进行。
我想念什么?
答案 0 :(得分:0)
您可能缺少的是,在实际的UI流程和与第三方网站进行OAuth的程序化流程之间存在混淆。
您想要做的是完成程序化登录,然后在测试代码中手动将所需的参数发送到应用的OAuth回调URL。
此处提供了一个示例(尽管它使用了不同的授予类型,但可以给您一个想法)https://auth0.com/blog/end-to-end-testing-with-cypress-and-auth0/#Writing-tests-using-Cypress-Login-Command
赛普拉斯github上的另一个问题,涉及类似的问题 https://github.com/cypress-io/cypress/issues/2085