Javascript 如何创建函数以获取Auth0令牌

Javascript 如何创建函数以获取Auth0令牌,javascript,function,automated-tests,auth0,cypress,Javascript,Function,Automated Tests,Auth0,Cypress,我正在尝试创建一个函数,以便为用户从Auth0获取登录令牌,这样我就不必在每个测试场景之前使用登录测试(这无论如何都不起作用),而是希望有一个存储的令牌,并使用它来验证用户,以便测试应用程序。 我不是开发人员(甚至不是测试中的开发人员)。我是一名QA,正在努力学习足够多的Javascript,以便使用Cypress为我们新的内部风险评估应用程序创建测试场景。 我们有一个新应用程序的用户列表,所有用户都将通过Auth0进行验证。所有用户都是我们公司的内部用户,并且基于我们链接到Microsoft帐

我正在尝试创建一个函数,以便为用户从Auth0获取登录令牌,这样我就不必在每个测试场景之前使用登录测试(这无论如何都不起作用),而是希望有一个存储的令牌,并使用它来验证用户,以便测试应用程序。 我不是开发人员(甚至不是测试中的开发人员)。我是一名QA,正在努力学习足够多的Javascript,以便使用Cypress为我们新的内部风险评估应用程序创建测试场景。 我们有一个新应用程序的用户列表,所有用户都将通过Auth0进行验证。所有用户都是我们公司的内部用户,并且基于我们链接到Microsoft帐户的电子邮件

下面是我的登录测试,按下登录按钮,然后重定向到Auth0,然后输入我的电子邮件地址以验证登录。这是成功的,只是它实际上没有加载应用程序

```
    describe('My Login Test', function (){
    it('Visit Risk App Landing Page', function (){
        const typedText = 'adam.allford@landmark.co.uk'
        cy.visit('https://bvt-riskassessment.lmkcloud.net')
        cy.get('button').click()
        cy.get('input.auth0-lock-input').first()
        .type(typedText)
        .should('have.value', typedText)
        cy.get('button').click()
        cy.url().should('eq','http://bvt-riskassessment.lmkcloud.net/workflow')
         })
    })
```
我在Gitter论坛上收到一个回复,有人有类似的问题,并使用下面显示的内容(或类似内容)尝试登录。我对它进行了编辑,其中包含了我所需要的相关详细信息,并将其放入command.js中,并在所示的位置使用loginuser.json(包含用户名和密码),然后将beforeach包含在测试场景中

```

    Cypress.Commands.add('login', (userType, options = {}) => 
    {cy.readFile(`cypress/fixtures/loginUser.json`).then((json) => {
    const { email, password } = json
       const dataToSend = {
           email,
           password,
       }
       cy.request({
           url: `https://lmcorp.eu.auth0.com/userinfo`,
           method: 'POST',
           body: dataToSend,
           form: true
       }).then((response) => {
           const { status, body } = response
           expect(status).to.eq(200)
           expect(body).to.have.property('success', 1)
           cy.visit(url)
      })
    })

    //and use it like :
    beforeEach(() => { login('url') })
```
```
    describe('My First Test', function (){
    it('Visit Risk App Landing Page', function (){
        beforeEach(() => { login('https://lmcorp.eu.auth0.com/')})
        cy.visit('http://localhost:3000/workflow')
        cy.contains('Site Solutions Combined Assessments')
        cy.contains('To Do')
        cy.contains('Assessing')
        cy.contains('Reviewing')
        cy.contains('Done')
        cy.get('button').click()
        cy.contains('Assessments')
        cy.contains('Site Solutions Combined')
        cy.contains('Flood')
        cy.contains('Whatever Next')
    })
    })

```
…然后在测试场景中包含beforeach

```

    Cypress.Commands.add('login', (userType, options = {}) => 
    {cy.readFile(`cypress/fixtures/loginUser.json`).then((json) => {
    const { email, password } = json
       const dataToSend = {
           email,
           password,
       }
       cy.request({
           url: `https://lmcorp.eu.auth0.com/userinfo`,
           method: 'POST',
           body: dataToSend,
           form: true
       }).then((response) => {
           const { status, body } = response
           expect(status).to.eq(200)
           expect(body).to.have.property('success', 1)
           cy.visit(url)
      })
    })

    //and use it like :
    beforeEach(() => { login('url') })
```
```
    describe('My First Test', function (){
    it('Visit Risk App Landing Page', function (){
        beforeEach(() => { login('https://lmcorp.eu.auth0.com/')})
        cy.visit('http://localhost:3000/workflow')
        cy.contains('Site Solutions Combined Assessments')
        cy.contains('To Do')
        cy.contains('Assessing')
        cy.contains('Reviewing')
        cy.contains('Done')
        cy.get('button').click()
        cy.contains('Assessments')
        cy.contains('Site Solutions Combined')
        cy.contains('Flood')
        cy.contains('Whatever Next')
    })
    })

```
但我在命令控制台上得到以下消息

!![备选]


我完全被卡住了,不知道该怎么办。我的问题是:我想创建一个功能,它将调用auth0url并获取登录身份验证令牌,该令牌可用于允许对每个测试场景访问应用程序。我是否可以更改我在这里的内容以使其正常工作,或者有人对如何创建新功能以获取Auth0令牌有任何建议?

可能不会更改内容,但
beforeach()
通常位于
it()
之外。此外,手动运行这些步骤并查看固有的延迟,例如,登录似乎需要半秒钟的时间。如果是这样,请在登录命令后添加一个
cy.wait(500)
(调整持续时间)。嗨,Richard,谢谢你的评论。移动之前,每个已经作出了改变,我现在得到一条消息,说明“登录”没有定义。所以我可以做这件事。但是,添加超时对登录测试没有影响。再次感谢,没问题。这种情况可能并不总是如此,但是
Cypress.Commands.add(…
我见过以链式或流畅的方式使用该命令的例子(如
.type()
.should()
)。你可能只需要一个简单的JS函数来登录,而不是一个命令。你能链接这个想法来自的Gitter论坛吗?嗨。这是这个想法提出的Gitter论坛,虽然那是几周前的事了,所以找到这个帖子可能会很困难。