@vitest/runner 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +32 -29
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -111,11 +111,12 @@ function mergeContextFixtures(fixtures, context = {}) {
111
111
  return context;
112
112
  }
113
113
  const fixtureValueMaps = /* @__PURE__ */ new Map();
114
- let cleanupFnArray = new Array();
115
- async function callFixtureCleanup() {
114
+ const cleanupFnArrayMap = /* @__PURE__ */ new Map();
115
+ async function callFixtureCleanup(context) {
116
+ const cleanupFnArray = cleanupFnArrayMap.get(context) ?? [];
116
117
  for (const cleanup of cleanupFnArray.reverse())
117
118
  await cleanup();
118
- cleanupFnArray = [];
119
+ cleanupFnArrayMap.delete(context);
119
120
  }
120
121
  function withFixtures(fn, testContext) {
121
122
  return (hookContext) => {
@@ -131,6 +132,9 @@ function withFixtures(fn, testContext) {
131
132
  if (!fixtureValueMaps.get(context))
132
133
  fixtureValueMaps.set(context, /* @__PURE__ */ new Map());
133
134
  const fixtureValueMap = fixtureValueMaps.get(context);
135
+ if (!cleanupFnArrayMap.has(context))
136
+ cleanupFnArrayMap.set(context, []);
137
+ const cleanupFnArray = cleanupFnArrayMap.get(context);
134
138
  const usedFixtures = fixtures.filter(({ prop }) => usedProps.includes(prop));
135
139
  const pendingFixtures = resolveDeps(usedFixtures);
136
140
  if (!pendingFixtures.length)
@@ -139,30 +143,7 @@ function withFixtures(fn, testContext) {
139
143
  for (const fixture of pendingFixtures) {
140
144
  if (fixtureValueMap.has(fixture))
141
145
  continue;
142
- let resolvedValue;
143
- if (fixture.isFn) {
144
- const useFnArgPromise = createDefer();
145
- let isUseFnArgResolved = false;
146
- const fixtureReturn = fixture.value(context, async (useFnArg) => {
147
- isUseFnArgResolved = true;
148
- useFnArgPromise.resolve(useFnArg);
149
- const useReturnPromise = createDefer();
150
- cleanupFnArray.push(async () => {
151
- useReturnPromise.resolve();
152
- await fixtureReturn;
153
- });
154
- await useReturnPromise;
155
- }).catch((e) => {
156
- if (!isUseFnArgResolved) {
157
- useFnArgPromise.reject(e);
158
- return;
159
- }
160
- throw e;
161
- });
162
- resolvedValue = await useFnArgPromise;
163
- } else {
164
- resolvedValue = fixture.value;
165
- }
146
+ const resolvedValue = fixture.isFn ? await resolveFixtureFunction(fixture.value, context, cleanupFnArray) : fixture.value;
166
147
  context[fixture.prop] = resolvedValue;
167
148
  fixtureValueMap.set(fixture, resolvedValue);
168
149
  cleanupFnArray.unshift(() => {
@@ -173,6 +154,27 @@ function withFixtures(fn, testContext) {
173
154
  return resolveFixtures().then(() => fn(context));
174
155
  };
175
156
  }
157
+ async function resolveFixtureFunction(fixtureFn, context, cleanupFnArray) {
158
+ const useFnArgPromise = createDefer();
159
+ let isUseFnArgResolved = false;
160
+ const fixtureReturn = fixtureFn(context, async (useFnArg) => {
161
+ isUseFnArgResolved = true;
162
+ useFnArgPromise.resolve(useFnArg);
163
+ const useReturnPromise = createDefer();
164
+ cleanupFnArray.push(async () => {
165
+ useReturnPromise.resolve();
166
+ await fixtureReturn;
167
+ });
168
+ await useReturnPromise;
169
+ }).catch((e) => {
170
+ if (!isUseFnArgResolved) {
171
+ useFnArgPromise.reject(e);
172
+ return;
173
+ }
174
+ throw e;
175
+ });
176
+ return useFnArgPromise;
177
+ }
176
178
  function resolveDeps(fixtures, depSet = /* @__PURE__ */ new Set(), pendingFixtures = []) {
177
179
  fixtures.forEach((fixture) => {
178
180
  if (pendingFixtures.includes(fixture))
@@ -243,7 +245,7 @@ const suite = createSuite();
243
245
  const test = createTest(
244
246
  function(name, fn, options) {
245
247
  if (getCurrentTest())
246
- throw new Error("Nested tests are not allowed");
248
+ throw new Error('Calling the test function inside another test function is not allowed. Please put it inside "describe" or "suite" so it can be properly collected.');
247
249
  getCurrentSuite().test.fn.call(this, formatName(name), fn, options);
248
250
  }
249
251
  );
@@ -692,12 +694,13 @@ async function runTest(test, runner) {
692
694
  test.mode = "skip";
693
695
  test.result = { state: "skip" };
694
696
  updateTask(test, runner);
697
+ setCurrentTest(void 0);
695
698
  return;
696
699
  }
697
700
  try {
698
701
  await callSuiteHook(test.suite, test, "afterEach", runner, [test.context, test.suite]);
699
702
  await callCleanupHooks(beforeEachCleanups);
700
- await callFixtureCleanup();
703
+ await callFixtureCleanup(test.context);
701
704
  } catch (e) {
702
705
  failTask(test.result, e, runner.config.diffOptions);
703
706
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vitest/runner",
3
3
  "type": "module",
4
- "version": "1.1.0",
4
+ "version": "1.1.2",
5
5
  "description": "Vitest test runner",
6
6
  "license": "MIT",
7
7
  "funding": "https://opencollective.com/vitest",
@@ -40,7 +40,7 @@
40
40
  "dependencies": {
41
41
  "p-limit": "^5.0.0",
42
42
  "pathe": "^1.1.1",
43
- "@vitest/utils": "1.1.0"
43
+ "@vitest/utils": "1.1.2"
44
44
  },
45
45
  "scripts": {
46
46
  "build": "rimraf dist && rollup -c",