简体   繁体   中英

How to access specific record from fixture/*.json file into sepcific test case in cypress?

testdata.json

[
    {
        "case_id": 1,
        "case": "Login with valid data as wholesaler",
        "username": "admin",
        "password": "password",
        "result": "pass"
    },
    {
        "case_id": 2,
        "case": "Login with valid data as reseller",
        "username": "myreseller.admin",
        "password": "password",
        "result": "pass"
    },
    {
        "case_id": 3,
        "case": "Login with valid data as subscriber",
        "username": "mytenant.admin",
        "password": "password",
        "result": "pass"
    }
]

login.spec.js

  before(() => {
    cy.fixture('testdata').then((datajson) => {
      testdata = datajson
      return testdata
    })
  })
------it blocks-----
  it.only('TC03 - Login with valid data as subscriber', () => {
    cy.login(testdata.username, testdata.password);                            
    cy.title().should('equal', 'Home');
    cy.logout();
-------more it blocks-------

How to use it properly so that line 2 returns {testdata.username = mytenant.admin || testdata.password = password} fetching specifically from 3rd record

Your json is structured as an array, so you need to get elements from it using index or restructure your testdata.json fixture.

Try this:

it.only('TC03 - Login with valid data as subscriber', () => {
    cy.fixture('testdata').then((dataFixture) => {
        cy.login(dataFixture[2].username, dataFixture[2].password);
        cy.title().should('equal', 'Home');
        cy.logout();
    })
})

PS Assuming your testdata is imported at the top of the file.

You can do something like this:

describe('Some Test Suite', function () {
  beforeEach(function () {
    cy.fixture('testdata').then(function (testdata) {
      this.testdata = testdata
    })
  })

  it.only('TC03 - Login with valid data as subscriber', function () {
    cy.log(this.testdata[2].username) //prints mytenant.admin
    cy.log(this.testdata[2].password) //prints password
    cy.login(this.testdata[2].username, this.testdata[2].password)
    cy.title().should('equal', 'Home')
    cy.logout()
  })
})

Make sure that you are getting the fixtures file in beforeEach() so that the fixture is available for all test cases.

In the Cypress Docs there are two ways described how you can handle those JSON files from the fixtures folder: https://docs.cypress.io/api/commands/fixture#Examples

1. Option

Load your testdata.json using cy.fixture():

cy.fixture('testdata.json').as('testdata');

2. Option (my recommendation)

In your login.spec.js you can import all relevant json files from your fixtures folder:

import testdata from '../fixtures/testdata.json';

You can then directly use them as follows to for example use the username and password for the first user:

  it.only('TC03 - Login with valid data as subscriber', () => {
    cy.login(testdata[0].username, testdata[0].password);                            
    cy.title().should('equal', 'Home');
    cy.logout();
  })

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM