使用赛普拉斯测试依赖OAuth的应用

时间:2019-05-24 12:57:52

标签: testing oauth-2.0 cypress

我继承了使用依赖于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之后的重定向。但是,当我在浏览器中访问该网站时,重定向正在按预期进行。

我想念什么?

1 个答案:

答案 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

这也可能会有所帮助: https://github.com/cypress-io/cypress-example-recipes/blob/master/examples/logging-in__single-sign-on/cypress/integration/logging-in-single-sign-on-spec.js