Bird
Raised Fist0
Cypresstesting~15 mins

Reading file contents in Cypress - Build an Automation Script

Choose your learning style10 modes available
Verify contents of a text file
Preconditions (2)
Step 1: Open the test environment
Step 2: Read the contents of 'sample.txt' file using Cypress
Step 3: Verify that the file contents exactly match 'Hello, Cypress!'
✅ Expected Result: The test should confirm that the file content is 'Hello, Cypress!' and pass
Automation Requirements - Cypress
Assertions Needed:
Assert that the file content equals 'Hello, Cypress!'
Best Practices:
Use cy.fixture() to read file contents
Use .then() to handle asynchronous reading
Use strict equality assertion with .should('eq', expectedValue)
Automated Solution
Cypress
describe('Reading file contents test', () => {
  it('should read and verify the contents of sample.txt', () => {
    cy.fixture('sample.txt').then((content) => {
      expect(content).to.eq('Hello, Cypress!')
    })
  })
})

This test uses cy.fixture() to read the file sample.txt from the cypress/fixtures folder.

The .then() callback handles the asynchronous file read and receives the file content as content.

We then use expect(content).to.eq('Hello, Cypress!') to assert the content exactly matches the expected string.

This approach follows Cypress best practices for reading files and making assertions.

Common Mistakes - 3 Pitfalls
Using cy.readFile() without specifying the correct path
Not handling the asynchronous nature of file reading
{'mistake': "Using loose equality assertions like .should('contain', expectedValue) when exact match is needed", 'why_bad': 'The test may pass even if the file content has extra unexpected text.', 'correct_approach': "Use strict equality assertions like .should('eq', expectedValue) or expect().to.eq()"}
Bonus Challenge

Now add data-driven testing to verify contents of three different files: 'sample1.txt', 'sample2.txt', and 'sample3.txt' with expected contents 'Hello, Cypress!', 'Test File 2', and 'Final File Content' respectively.

Show Hint

Practice

(1/5)
1. What is the primary purpose of cy.readFile() in Cypress testing?
easy
A. To read the contents of a file during a test
B. To write data to a file during a test
C. To delete a file before running tests
D. To upload a file to the server

Solution

  1. Step 1: Understand the function name

    cy.readFile() suggests reading a file, not writing or deleting.
  2. Step 2: Recall Cypress documentation

    This command reads file contents so tests can verify data inside files.
  3. Final Answer:

    To read the contents of a file during a test -> Option A
  4. Quick Check:

    cy.readFile() reads file contents [OK]
Hint: Remember: readFile reads, writeFile writes [OK]
Common Mistakes:
  • Confusing readFile with writeFile
  • Thinking it uploads files
  • Assuming it deletes files
2. Which of the following is the correct syntax to read a JSON file named data.json using Cypress?
easy
A. cy.readFile('data.json', 'utf8')
B. cy.readFile('data.json').then((content) => { /* use content */ })
C. cy.readFile('data.json').catch((content) => { /* use content */ })
D. cy.readFile('data.json').write((content) => { /* use content */ })

Solution

  1. Step 1: Identify correct method chaining

    Using then() after cy.readFile() is correct to access file content.
  2. Step 2: Check other options

    catch() is for errors, not normal reading; write() is invalid here; passing 'utf8' alone is incomplete.
  3. Final Answer:

    cy.readFile('data.json').then((content) => { /* use content */ }) -> Option B
  4. Quick Check:

    Use then() to handle readFile content [OK]
Hint: Use then() to access file content after readFile [OK]
Common Mistakes:
  • Using catch() instead of then()
  • Trying to write after readFile
  • Passing encoding without then()
3. Given the code below, what will be logged to the console if example.txt contains the text "Hello Cypress"?
cy.readFile('example.txt').then((text) => {
  console.log(text);
});
medium
A. Empty string
B. undefined
C. An error because readFile needs JSON
D. "Hello Cypress"

Solution

  1. Step 1: Understand readFile behavior

    cy.readFile() reads file content as text by default if file is plain text.
  2. Step 2: Check the file content

    The file contains "Hello Cypress", so the callback receives this string and logs it.
  3. Final Answer:

    "Hello Cypress" -> Option D
  4. Quick Check:

    readFile logs file text content [OK]
Hint: readFile returns file content as string for text files [OK]
Common Mistakes:
  • Assuming readFile only works with JSON
  • Expecting undefined instead of content
  • Thinking it throws error for text files
4. Identify the error in the following Cypress code snippet that tries to read a file and assert its content:
cy.readFile('config.json').then((data) => {
  expect(data).to.equal('config');
});
medium
A. Incorrect file path syntax
B. Missing catch() to handle errors
C. Using to.equal() instead of to.deep.equal() for object comparison
D. readFile cannot be used with JSON files

Solution

  1. Step 1: Understand data type returned by readFile

    Reading a JSON file returns an object, not a string.
  2. Step 2: Check assertion method

    to.equal() checks strict equality, which fails for objects; to.deep.equal() is needed for object content comparison.
  3. Final Answer:

    Using to.equal() instead of to.deep.equal() for object comparison -> Option C
  4. Quick Check:

    Use deep.equal for object assertions [OK]
Hint: Use deep.equal for objects, equal for primitives [OK]
Common Mistakes:
  • Using to.equal() for objects
  • Ignoring error handling
  • Assuming readFile can't read JSON
5. You want to verify that a text file notes.txt contains the word "important" anywhere in its content using Cypress. Which code snippet correctly performs this check?
hard
A. cy.readFile('notes.txt').then((text) => { expect(text.includes('important')).to.be.true; })
B. cy.readFile('notes.txt').should('contain', 'important')
C. cy.readFile('notes.txt').then((text) => { expect(text).to.equal('important'); })
D. cy.readFile('notes.txt').then((text) => { expect(text).to.have.property('important'); })

Solution

  1. Step 1: Understand file content check

    We want to check if the word "important" is anywhere in the text, so we need to check substring presence.
  2. Step 2: Evaluate options

    cy.readFile('notes.txt').then((text) => { expect(text.includes('important')).to.be.true; }) uses includes() and asserts true, which is correct. cy.readFile('notes.txt').should('contain', 'important') is invalid because should('contain') is for DOM elements, not file content. cy.readFile('notes.txt').then((text) => { expect(text).to.equal('important'); }) checks exact equality, which is wrong. cy.readFile('notes.txt').then((text) => { expect(text).to.have.property('important'); }) wrongly uses to.have.property() on a string.
  3. Final Answer:

    cy.readFile('notes.txt').then((text) => { expect(text.includes('important')).to.be.true; }) -> Option A
  4. Quick Check:

    Use includes() to check substring in file text [OK]
Hint: Use includes() inside then() to check text content [OK]
Common Mistakes:
  • Using should('contain') on file content
  • Checking exact equality instead of substring
  • Using property assertion on string
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard