Skip to content

describe block without it does not trigger hooks #45028

Description

@scally

Version

18.9.0

Platform

Darwin Eorzea.local 21.6.0 Darwin Kernel Version 21.6.0: Mon Aug 22 20:19:52 PDT 2022; root:xnu-8020.140.49~2/RELEASE_ARM64_T6000 arm64

Subsystem

node:test

What steps will reproduce the bug?

Nested beforeEach contexts do not work with describe/it:

import{beforeEach,describe,it}from'node:test'import{strictasassert}from'node:assert'letobj={}describe('outer',()=>{beforeEach(()=>{obj.outer='ok'})describe('inner',()=>{beforeEach(()=>{obj.inner='ok'})it('works',()=>{assert.deepEqual(obj,{outer: 'ok',inner: 'ok'})})})})

The output looks like this, a failure, due to what seems is only the inner beforeEach being run:

Expected values to be strictly deep-equal: + actual - expected { inner: 'ok', - outer: 'ok' }

The same style of suite beforeEach nesting works with test

import{test}from'node:test'import{strictasassert}from'node:assert'letobj={}test('outer',asyncouter=>{outer.beforeEach(()=>{obj.outer='ok'})awaitouter.test('inner',asyncinner=>{inner.beforeEach(()=>{obj.inner='ok'})awaitinner.test('works',()=>{assert.deepEqual(obj,{outer: 'ok',inner: 'ok'})})})})

Outputs:

TAP version 13 # Subtest: inner # Subtest: works ok 1 - works --- duration_ms: 1.353708 ...
# Subtest: outer 1..1 ok 1 - inner --- duration_ms: 2.2555 ... 1..1ok 1 - outer --- duration_ms: 2.722792 ...1..1
# tests 1
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 4.435458

How often does it reproduce? Is there a required condition?

Always reproduces

What is the expected behavior?

Nested test contexts should work the same whether you are using describe/it or test

What do you see instead?

The expected and actual outputs are in the repro example above

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    test_runnerIssues and PRs related to the test runner subsystem.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions