带有部分的赛普拉斯和认证应用程序。您可以调用共享测试,即登录吗?

时间:2018-06-21 02:34:53

标签: cypress

我是柏树的新手。可以说我有以下结构。每个都应在真空中运行,但它们都需要登录。我可以创建一个用于登录的“命令”。但是可以说我有一个测试,ala login.spec.js

它所做的就是登录用户并重定向。很好。

但是,在那之后,各种开发人员将希望在特定领域下运行自己的测试。但是他们所有人都需要登录,因此不必总是创建相同的测试。.是否可以“共享”测试,然后继续进行他们感兴趣的测试?

例如:**文件夹名称**

**Integration**
  login.spec.js
  **CreateProduct**
     index.spec.js
  **PurchaseProduct** // <-- I want to run this, BUT with login.spec.js too as a before hook.
     index.spec.js
  etc...

现在,我只想在PurchaseProduct文件夹中运行测试,但是首先需要“登录”它们,所以,我想调用login.spec.js ...如何在整个测试环境中使用那些想要借用的人吗?

2 个答案:

答案 0 :(得分:2)

是的,.datesUntil支持在UI中创建和重用动作和状态的功能,例如在测试前注册和登录。

然而CypressCypress允许您比用户更有效地控制浏览器的状态,从而使测试更简单 >,更快更可靠

在下面查看此示例,其中cy.request()用于在服务器上创建/读取状态。

cy.request中:

commands/index.js

Cypress.Commands.add('login', (user) => { cy.request('POST', `${apiUrl}/users/login`, user) }) Cypress.Commands.add("register", (user) => { cy.request('POST', `${apiUrl}/users/register`, user) }) Cypress.Commands.add('getUser', (username) => { return cy.request('GET', `${apiUrl}/users/${username}`) }) 中:

register.spec.js

it ('can register', () => { const user = { name: 'jake', email: 'jake@jake.com', password: '12345' } cy.visit('/register') cy.get('input[name="name"]').type(user.name) cy.get('input[name="email"]').type(user.email) cy.get('input[name="password"]').type(user.password) cy.get('input[name="password-confirm"]').type(user.password) cy.get('input[type="submit"]').click() // ensure register page sends you /home after register cy.url().should('contain', '/home') // expect user from server to match user from test cy.getUser(user.name) .then((dbUser) => expect(dbUser).to.deep.eql(user)) }) 中:

login.spec.js

it('can log in', () => { const user = { name: 'jane', email: 'jane@jane.com', password: '12345' } // register w/out UI cy.register(user) cy.visit('/login') cy.get('input[name="name"]').type(user.name) cy.get('input[name="password"]').type(user.password) cy.get('input[type="submit"]').click() // ensure the login page sends you home after login cy.url().should('contain', '/home') }) 中:

userSettings.spec.js

答案 1 :(得分:1)

您了解可以创建一个登录命令。那么有什么理由不这样做吗?

如果您还没有这样做,我建议观看one of the official doc pages中引用的赛普拉斯创始人Brian Mann的演讲。请在下面找到与您的问题有关的两部分。

3 strategies to test the login page (8:40)

  • 存根请求,实际上不进行身份验证
  • 或数据库中的静态用户
  • 通过测试创建的动态用户

Centralize login (15:35)

  

(9分钟后),我们不必,或者您永远,也可以使用用户界面来   建立状态