• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../../../common');
3const assert = require('assert');
4const { test, describe, it, before, after, beforeEach, afterEach } = require('node:test');
5
6before((t) => t.diagnostic('before 1 called'));
7after((t) => t.diagnostic('after 1 called'));
8
9describe('describe hooks', () => {
10  const testArr = [];
11  before(function() {
12    testArr.push('before ' + this.name);
13  });
14  after(function() {
15    testArr.push('after ' + this.name);
16    assert.deepStrictEqual(testArr, [
17      'before describe hooks',
18      'beforeEach 1', '1', 'afterEach 1',
19      'beforeEach 2', '2', 'afterEach 2',
20      'before nested',
21      'beforeEach nested 1', '+beforeEach nested 1', 'nested 1', 'afterEach nested 1', '+afterEach nested 1',
22      'beforeEach nested 2', '+beforeEach nested 2', 'nested 2', 'afterEach nested 2', '+afterEach nested 2',
23      'after nested',
24      'after describe hooks',
25    ]);
26  });
27  beforeEach(function() {
28    testArr.push('beforeEach ' + this.name);
29  });
30  afterEach(function() {
31    testArr.push('afterEach ' + this.name);
32  });
33
34  it('1', () => testArr.push('1'));
35  test('2', () => testArr.push('2'));
36
37  describe('nested', () => {
38    before(function() {
39      testArr.push('before ' + this.name);
40    });
41    after(function() {
42      testArr.push('after ' + this.name);
43    });
44    beforeEach(function() {
45      testArr.push('+beforeEach ' + this.name);
46    });
47    afterEach(function() {
48      testArr.push('+afterEach ' + this.name);
49    });
50    it('nested 1', () => testArr.push('nested 1'));
51    test('nested 2', () => testArr.push('nested 2'));
52  });
53});
54
55describe('before throws', () => {
56  before(() => { throw new Error('before'); });
57  it('1', () => {});
58  test('2', () => {});
59});
60
61describe('after throws', () => {
62  after(() => { throw new Error('after'); });
63  it('1', () => {});
64  test('2', () => {});
65});
66
67describe('beforeEach throws', () => {
68  beforeEach(() => { throw new Error('beforeEach'); });
69  it('1', () => {});
70  test('2', () => {});
71});
72
73describe('afterEach throws', () => {
74  afterEach(() => { throw new Error('afterEach'); });
75  it('1', () => {});
76  test('2', () => {});
77});
78
79describe('afterEach when test fails', () => {
80  afterEach(common.mustCall(2));
81  it('1', () => { throw new Error('test'); });
82  test('2', () => {});
83});
84
85describe('afterEach throws and test fails', () => {
86  afterEach(() => { throw new Error('afterEach'); });
87  it('1', () => { throw new Error('test'); });
88  test('2', () => {});
89});
90
91test('test hooks', async (t) => {
92  const testArr = [];
93
94  t.before((t) => testArr.push('before ' + t.name));
95  t.after(common.mustCall((t) => testArr.push('after ' + t.name)));
96  t.beforeEach((t) => testArr.push('beforeEach ' + t.name));
97  t.afterEach((t) => testArr.push('afterEach ' + t.name));
98  await t.test('1', () => testArr.push('1'));
99  await t.test('2', () => testArr.push('2'));
100
101  await t.test('nested', async (t) => {
102    t.before((t) => testArr.push('nested before ' + t.name));
103    t.after((t) => testArr.push('nested after ' + t.name));
104    t.beforeEach((t) => testArr.push('nested beforeEach ' + t.name));
105    t.afterEach((t) => testArr.push('nested afterEach ' + t.name));
106    await t.test('nested 1', () => testArr.push('nested1'));
107    await t.test('nested 2', () => testArr.push('nested 2'));
108  });
109
110  t.after(common.mustCall(() => {
111    assert.deepStrictEqual(testArr, [
112      'before test hooks',
113      'beforeEach 1', '1', 'afterEach 1',
114      'beforeEach 2', '2', 'afterEach 2',
115      'beforeEach nested',
116      'nested before nested',
117      'beforeEach nested 1', 'nested beforeEach nested 1', 'nested1', 'afterEach nested 1', 'nested afterEach nested 1',
118      'beforeEach nested 2', 'nested beforeEach nested 2', 'nested 2', 'afterEach nested 2', 'nested afterEach nested 2',
119      'afterEach nested',
120      'nested after nested',
121      'after test hooks',
122    ]);
123  }));
124});
125
126test('t.before throws', async (t) => {
127  t.after(common.mustCall());
128  t.before(() => { throw new Error('before'); });
129  await t.test('1', () => {});
130  await t.test('2', () => {});
131});
132
133test('t.beforeEach throws', async (t) => {
134  t.after(common.mustCall());
135  t.beforeEach(() => { throw new Error('beforeEach'); });
136  await t.test('1', () => {});
137  await t.test('2', () => {});
138});
139
140test('t.afterEach throws', async (t) => {
141  t.after(common.mustCall());
142  t.afterEach(() => { throw new Error('afterEach'); });
143  await t.test('1', () => {});
144  await t.test('2', () => {});
145});
146
147
148test('afterEach when test fails', async (t) => {
149  t.after(common.mustCall());
150  t.afterEach(common.mustCall(2));
151  await t.test('1', () => { throw new Error('test'); });
152  await t.test('2', () => {});
153});
154
155test('afterEach throws and test fails', async (t) => {
156  t.after(common.mustCall());
157  t.afterEach(() => { throw new Error('afterEach'); });
158  await t.test('1', () => { throw new Error('test'); });
159  await t.test('2', () => {});
160});
161
162test('t.after() is called if test body throws', (t) => {
163  t.after(() => {
164    t.diagnostic('- after() called');
165  });
166  throw new Error('bye');
167});
168
169before((t) => t.diagnostic('before 2 called'));
170after((t) => t.diagnostic('after 2 called'));
171