@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.
- package/dist/index.js +32 -29
- 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
|
-
|
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
|
-
|
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
|
-
|
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(
|
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.
|
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.
|
43
|
+
"@vitest/utils": "1.1.2"
|
44
44
|
},
|
45
45
|
"scripts": {
|
46
46
|
"build": "rimraf dist && rollup -c",
|