Cypress fixtures 最佳实践
Cypress fixtures best practice
在赛普拉斯文档中,他们建议以这种方式使用固定装置
cy.fixture('logo.png').then((logo) => { // load data from logo.png })
但我发现它很乱,而且有局限性,因为我无法在 运行 测试之外获取此信息
所以我正在使用
import cred from "../fixtures/login_creds.json"
使用导入有缺点吗?
当然我在 cy 方法中使用它
cy.get(inputEmail).type(cred.email)
您可以使用 beforeEach()
来存储您对夹具的访问,以便它可用于您的所有测试。但是你必须处理一件事而不是 =>
你必须使用 function () { ... }
回调。
describe('Test Suite', () => {
beforeEach(function () {
// "this" points at the test context object
cy.fixture('login_creds.json').then((loginCreds) => {
// "this" is still the test context object
this.loginCreds = loginCreds
})
})
// the test callback is in "function () { ... }" form
it('Some test', function () {
// this.loginCreds exists
cy.get(inputEmail).type(this.loginCreds.email)
})
it('Another test', function () {
// this.loginCreds exists
cy.get(inputEmail2).type(this.loginCreds.email)
})
})
您可以从 fixtures docs 阅读更多相关信息。
导入夹具没问题。
它对 data-driven 测试很有用。
import sites from '../fixtures/sites.json'
sites.forEach(site => {
it(`test ${site}`, () => {
cy.visit(site)
...
})
})
此处描述了几乎所有使用固定装置的方法 Load Fixtures from Cypress Custom Commands,包括使用 import
(最后一个示例)
/// <reference types="cypress" />
import { users } from '../fixtures/data.json'
// note that Cypress._ is available outside of any test.
// the index k will be from 0 to users.length - 1
const k = Cypress._.random(users.length - 1)
expect(k, 'random user index').to.be.within(0, users.length - 1)
const testUser = users[k]
他们中的很多人使用“公共变量”来存储夹具。
无需修改测试结构即可工作。
// use a common variable to store the random user
let testUser
before(() => {
cy.fixture('data.json').then(({ users }) => {
// the index k will be from 0 to users.length - 1
const k = Cypress._.random(users.length - 1)
expect(k, 'random user index').to.be.within(0, users.length - 1)
testUser = users[k]
// we need to send the entire database object
cy.request('POST', '/reset', {
users: [testUser],
})
})
})
it('sets the random user from the fixture list', () => {
cy.visit('/')
const name = testUser.name
cy.contains('#user', `${name.first} ${name.last}`)
})
it('has the test user', () => {
expect(testUser).to.be.an('object')
})
在赛普拉斯文档中,他们建议以这种方式使用固定装置
cy.fixture('logo.png').then((logo) => { // load data from logo.png })
但我发现它很乱,而且有局限性,因为我无法在 运行 测试之外获取此信息
所以我正在使用
import cred from "../fixtures/login_creds.json"
使用导入有缺点吗? 当然我在 cy 方法中使用它
cy.get(inputEmail).type(cred.email)
您可以使用 beforeEach()
来存储您对夹具的访问,以便它可用于您的所有测试。但是你必须处理一件事而不是 =>
你必须使用 function () { ... }
回调。
describe('Test Suite', () => {
beforeEach(function () {
// "this" points at the test context object
cy.fixture('login_creds.json').then((loginCreds) => {
// "this" is still the test context object
this.loginCreds = loginCreds
})
})
// the test callback is in "function () { ... }" form
it('Some test', function () {
// this.loginCreds exists
cy.get(inputEmail).type(this.loginCreds.email)
})
it('Another test', function () {
// this.loginCreds exists
cy.get(inputEmail2).type(this.loginCreds.email)
})
})
您可以从 fixtures docs 阅读更多相关信息。
导入夹具没问题。
它对 data-driven 测试很有用。
import sites from '../fixtures/sites.json'
sites.forEach(site => {
it(`test ${site}`, () => {
cy.visit(site)
...
})
})
此处描述了几乎所有使用固定装置的方法 Load Fixtures from Cypress Custom Commands,包括使用 import
(最后一个示例)
/// <reference types="cypress" />
import { users } from '../fixtures/data.json'
// note that Cypress._ is available outside of any test.
// the index k will be from 0 to users.length - 1
const k = Cypress._.random(users.length - 1)
expect(k, 'random user index').to.be.within(0, users.length - 1)
const testUser = users[k]
他们中的很多人使用“公共变量”来存储夹具。
无需修改测试结构即可工作。
// use a common variable to store the random user
let testUser
before(() => {
cy.fixture('data.json').then(({ users }) => {
// the index k will be from 0 to users.length - 1
const k = Cypress._.random(users.length - 1)
expect(k, 'random user index').to.be.within(0, users.length - 1)
testUser = users[k]
// we need to send the entire database object
cy.request('POST', '/reset', {
users: [testUser],
})
})
})
it('sets the random user from the fixture list', () => {
cy.visit('/')
const name = testUser.name
cy.contains('#user', `${name.first} ${name.last}`)
})
it('has the test user', () => {
expect(testUser).to.be.an('object')
})