Bird
Raised Fist0
Cypresstesting~5 mins

before and after hooks in Cypress - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of before hooks in Cypress tests?

before hooks run once before all tests in a block. They set up things like visiting a page or logging in, so tests start in the right state.

Click to reveal answer
beginner
How does the after hook help in Cypress testing?

after hooks run once after all tests finish. They clean up or reset things, like logging out or clearing data, to keep tests independent.

Click to reveal answer
intermediate
What is the difference between before and beforeEach hooks?

before runs once before all tests, while beforeEach runs before every single test. Use beforeEach to reset state before each test.

Click to reveal answer
beginner
Show a simple example of using before and after hooks in Cypress.
describe('My Test Suite', () => {
  before(() => {
    cy.visit('/login')
  })

  after(() => {
    cy.clearCookies()
  })

  it('checks page title', () => {
    cy.title().should('include', 'Login')
  })
})
Click to reveal answer
intermediate
Why should tests avoid relying on afterEach hooks for cleanup?

Because it can lead to tests depending on previous outcomes. It's safer to use beforeEach to reset state before each test or design tests to be independent.

Click to reveal answer
When does the before hook run in Cypress?
AAfter each test
BBefore each test
COnce before all tests in a describe block
DOnce after all tests
Which hook runs after all tests finish in a Cypress test suite?
AafterEach
Bafter
CbeforeEach
Dbefore
What is a good use case for beforeEach in Cypress?
ATo reset application state before each test
BTo skip tests
CTo clean up after all tests
DTo run setup once before all tests
What happens if a test fails before the afterEach hook runs?
AThe <code>afterEach</code> hook still runs
BThe test automatically passes
CThe <code>afterEach</code> hook might not run, causing leftover state
DThe test suite stops immediately
Which hook is best to visit a page once before all tests?
Aafter
BafterEach
CbeforeEach
Dbefore
Explain how before and after hooks help organize Cypress tests.
Think about setup and cleanup tasks.
You got /5 concepts.
    Describe the difference between beforeEach and before hooks with examples.
    Focus on how often each hook runs.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of before and after hooks in Cypress testing?
      easy
      A. To define test data inside tests
      B. To write the main test steps
      C. To skip tests conditionally
      D. To run setup and cleanup code once per test suite

      Solution

      1. Step 1: Understand the role of hooks

        Hooks like before and after run code automatically before or after tests.
      2. Step 2: Identify their scope

        before and after run once per test suite, ideal for setup and cleanup.
      3. Final Answer:

        To run setup and cleanup code once per test suite -> Option D
      4. Quick Check:

        Hooks run code around tests = D [OK]
      Hint: Remember: before/after run once per suite, beforeEach/afterEach per test [OK]
      Common Mistakes:
      • Confusing before with beforeEach
      • Thinking hooks run inside tests
      • Using hooks to skip tests
      2. Which of the following is the correct syntax to run a function once before all tests in a Cypress test suite?
      easy
      A. before(() => { cy.visit('/') })
      B. beforeEach(() => { cy.visit('/') })
      C. after(() => { cy.visit('/') })
      D. afterEach(() => { cy.visit('/') })

      Solution

      1. Step 1: Identify the hook that runs once before all tests

        before runs once before the entire suite; beforeEach runs before each test.
      2. Step 2: Match the syntax

        before(() => { cy.visit('/') }) is the correct syntax to run once before all tests.
      3. Final Answer:

        before(() => { cy.visit('/') }) -> Option A
      4. Quick Check:

        Run once before all tests = before() = A [OK]
      Hint: Use before() for once before all tests, beforeEach() for every test [OK]
      Common Mistakes:
      • Using beforeEach instead of before for once-per-suite setup
      • Confusing after with before
      • Incorrect arrow function syntax
      3. Consider this Cypress code snippet:
      describe('My Suite', () => {
        before(() => {
          cy.log('Setup once')
        })
        beforeEach(() => {
          cy.log('Setup before each test')
        })
        it('Test 1', () => {
          cy.log('Running Test 1')
        })
        it('Test 2', () => {
          cy.log('Running Test 2')
        })
      })

      What is the order of logs printed during test execution?
      medium
      A. Setup before each test, Setup once, Running Test 1, Running Test 2
      B. Setup once, Setup before each test, Running Test 1, Setup before each test, Running Test 2
      C. Running Test 1, Setup once, Setup before each test, Running Test 2
      D. Setup once, Running Test 1, Setup before each test, Running Test 2

      Solution

      1. Step 1: Understand hook execution order

        before runs once before all tests, beforeEach runs before each test.
      2. Step 2: Trace the logs

        Logs print in this order: 'Setup once' (before all), then for Test 1: 'Setup before each test', 'Running Test 1', then for Test 2: 'Setup before each test', 'Running Test 2'.
      3. Final Answer:

        Setup once, Setup before each test, Running Test 1, Setup before each test, Running Test 2 -> Option B
      4. Quick Check:

        before runs once, beforeEach runs before each test = A [OK]
      Hint: Remember: before runs once, beforeEach runs before every test [OK]
      Common Mistakes:
      • Thinking beforeEach runs only once
      • Mixing order of logs
      • Ignoring before hook
      4. You wrote this Cypress test code:
      describe('Test Suite', () => {
        beforeEach(() => {
          cy.visit('/home')
        })
        after(() => {
          cy.clearCookies()
        })
        it('Test A', () => {
          cy.get('#btn').click()
        })
        it('Test B', () => {
          cy.get('#btn').click()
        })
      })

      But the cy.clearCookies() is not running after each test as expected. What is the problem?
      medium
      A. after runs once after all tests, not after each test
      B. You must call cy.clearCookies() inside each test manually
      C. after should be afterEach to run after each test
      D. beforeEach should be before to clear cookies

      Solution

      1. Step 1: Understand the difference between after and afterEach

        after runs once after all tests; afterEach runs after each test.
      2. Step 2: Identify the problem

        after runs once after all tests, not after each test.
      3. Final Answer:

        after runs once after all tests, not after each test -> Option A
      4. Quick Check:

        after runs once per suite = A [OK]
      Hint: Use afterEach for per-test cleanup, after for once after all tests [OK]
      Common Mistakes:
      • Using after instead of afterEach for per-test cleanup
      • Expecting after to run multiple times
      • Manually clearing cookies inside tests
      5. You want to run a setup step once before all tests, a cleanup step once after all tests, and also run a login step before each test in Cypress. Which code snippet correctly implements this?
      hard
      A. beforeEach(() => { cy.setup() }); afterEach(() => { cy.cleanup() }); before(() => { cy.login() });
      B. before(() => { cy.login() }); afterEach(() => { cy.cleanup() }); beforeEach(() => { cy.setup() });
      C. before(() => { cy.setup() }); after(() => { cy.cleanup() }); beforeEach(() => { cy.login() });
      D. after(() => { cy.setup() }); before(() => { cy.cleanup() }); afterEach(() => { cy.login() });

      Solution

      1. Step 1: Assign setup and cleanup hooks

        Setup runs once before all tests using before, cleanup runs once after all tests using after.
      2. Step 2: Assign login before each test

        Login runs before each test using beforeEach.
      3. Step 3: Verify correct order and usage

        before(() => { cy.setup() }); after(() => { cy.cleanup() }); beforeEach(() => { cy.login() }); correctly uses before, after, and beforeEach for these steps.
      4. Final Answer:

        before(() => { cy.setup() }); after(() => { cy.cleanup() }); beforeEach(() => { cy.login() }); -> Option C
      5. Quick Check:

        Setup once before, cleanup once after, login before each = B [OK]
      Hint: Use before for setup, after for cleanup, beforeEach for per-test login [OK]
      Common Mistakes:
      • Mixing beforeEach with once-per-suite hooks
      • Placing login in before or after hooks incorrectly
      • Swapping setup and cleanup hooks
      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