@effect/vitest 0.10.4 → 0.10.6
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/cjs/index.js +47 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal.js +34 -7
- package/dist/cjs/internal.js.map +1 -1
- package/dist/dts/index.d.ts +62 -9
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/index.js +45 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal.js +32 -6
- package/dist/esm/internal.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +72 -2
- package/src/internal.ts +74 -8
package/dist/cjs/index.js
CHANGED
|
@@ -9,10 +9,11 @@ var _exportNames = {
|
|
|
9
9
|
scoped: true,
|
|
10
10
|
live: true,
|
|
11
11
|
scopedLive: true,
|
|
12
|
+
layer: true,
|
|
12
13
|
flakyTest: true,
|
|
13
14
|
it: true
|
|
14
15
|
};
|
|
15
|
-
exports.scopedLive = exports.scoped = exports.live = exports.it = exports.flakyTest = exports.effect = exports.addEqualityTesters = void 0;
|
|
16
|
+
exports.scopedLive = exports.scoped = exports.live = exports.layer = exports.it = exports.flakyTest = exports.effect = exports.addEqualityTesters = void 0;
|
|
16
17
|
var V = _interopRequireWildcard(require("vitest"));
|
|
17
18
|
Object.keys(V).forEach(function (key) {
|
|
18
19
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -48,6 +49,49 @@ const live = exports.live = internal.live;
|
|
|
48
49
|
* @since 1.0.0
|
|
49
50
|
*/
|
|
50
51
|
const scopedLive = exports.scopedLive = internal.scopedLive;
|
|
52
|
+
/**
|
|
53
|
+
* Share a `Layer` between multiple tests, optionally wrapping
|
|
54
|
+
* the tests in a `describe` block if a name is provided.
|
|
55
|
+
*
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
*
|
|
58
|
+
* ```ts
|
|
59
|
+
* import { expect, layer } from "@effect/vitest"
|
|
60
|
+
* import { Context, Effect, Layer } from "effect"
|
|
61
|
+
*
|
|
62
|
+
* class Foo extends Context.Tag("Foo")<Foo, "foo">() {
|
|
63
|
+
* static Live = Layer.succeed(Foo, "foo")
|
|
64
|
+
* }
|
|
65
|
+
*
|
|
66
|
+
* class Bar extends Context.Tag("Bar")<Bar, "bar">() {
|
|
67
|
+
* static Live = Layer.effect(
|
|
68
|
+
* Bar,
|
|
69
|
+
* Effect.map(Foo, () => "bar" as const)
|
|
70
|
+
* )
|
|
71
|
+
* }
|
|
72
|
+
*
|
|
73
|
+
* layer(Foo.Live)("layer", (it) => {
|
|
74
|
+
* it.effect("adds context", () =>
|
|
75
|
+
* Effect.gen(function* () {
|
|
76
|
+
* const foo = yield* Foo
|
|
77
|
+
* expect(foo).toEqual("foo")
|
|
78
|
+
* })
|
|
79
|
+
* )
|
|
80
|
+
*
|
|
81
|
+
* it.layer(Bar.Live)("nested", (it) => {
|
|
82
|
+
* it.effect("adds context", () =>
|
|
83
|
+
* Effect.gen(function* () {
|
|
84
|
+
* const foo = yield* Foo
|
|
85
|
+
* const bar = yield* Bar
|
|
86
|
+
* expect(foo).toEqual("foo")
|
|
87
|
+
* expect(bar).toEqual("bar")
|
|
88
|
+
* })
|
|
89
|
+
* )
|
|
90
|
+
* })
|
|
91
|
+
* })
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
const layer = exports.layer = internal.layer;
|
|
51
95
|
/**
|
|
52
96
|
* @since 1.0.0
|
|
53
97
|
*/
|
|
@@ -58,7 +102,8 @@ const methods = {
|
|
|
58
102
|
live,
|
|
59
103
|
flakyTest,
|
|
60
104
|
scoped,
|
|
61
|
-
scopedLive
|
|
105
|
+
scopedLive,
|
|
106
|
+
layer
|
|
62
107
|
};
|
|
63
108
|
/**
|
|
64
109
|
* @since 1.0.0
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["V","_interopRequireWildcard","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","internal","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","addEqualityTesters","effect","scoped","live","scopedLive","flakyTest","methods","it","assign"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["V","_interopRequireWildcard","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","internal","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","addEqualityTesters","effect","scoped","live","scopedLive","layer","flakyTest","methods","it","assign"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/cjs/internal.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.scopedLive = exports.scoped = exports.live = exports.flakyTest = exports.effect = exports.addEqualityTesters = void 0;
|
|
6
|
+
exports.scopedLive = exports.scoped = exports.live = exports.layer = exports.flakyTest = exports.effect = exports.addEqualityTesters = void 0;
|
|
7
7
|
var Cause = _interopRequireWildcard(require("effect/Cause"));
|
|
8
8
|
var Duration = _interopRequireWildcard(require("effect/Duration"));
|
|
9
9
|
var Effect = _interopRequireWildcard(require("effect/Effect"));
|
|
@@ -13,21 +13,19 @@ var Fiber = _interopRequireWildcard(require("effect/Fiber"));
|
|
|
13
13
|
var _Function = require("effect/Function");
|
|
14
14
|
var Layer = _interopRequireWildcard(require("effect/Layer"));
|
|
15
15
|
var Logger = _interopRequireWildcard(require("effect/Logger"));
|
|
16
|
-
var Runtime = _interopRequireWildcard(require("effect/Runtime"));
|
|
17
16
|
var Schedule = _interopRequireWildcard(require("effect/Schedule"));
|
|
17
|
+
var Scope = _interopRequireWildcard(require("effect/Scope"));
|
|
18
18
|
var TestEnvironment = _interopRequireWildcard(require("effect/TestContext"));
|
|
19
19
|
var Utils = _interopRequireWildcard(require("effect/Utils"));
|
|
20
20
|
var V = _interopRequireWildcard(require("vitest"));
|
|
21
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
22
22
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
23
|
-
|
|
24
|
-
const runTest = ctx => effect => Effect.gen(function* () {
|
|
23
|
+
const runPromise = ctx => effect => Effect.gen(function* () {
|
|
25
24
|
const exitFiber = yield* Effect.fork(Effect.exit(effect));
|
|
26
|
-
|
|
27
|
-
ctx.onTestFinished(() => Fiber.interrupt(exitFiber).pipe(Effect.asVoid, Runtime.runPromise(runtime)));
|
|
25
|
+
ctx?.onTestFinished(() => Fiber.interrupt(exitFiber).pipe(Effect.asVoid, Effect.runPromise));
|
|
28
26
|
const exit = yield* Fiber.join(exitFiber);
|
|
29
27
|
if (Exit.isSuccess(exit)) {
|
|
30
|
-
return () =>
|
|
28
|
+
return () => exit.value;
|
|
31
29
|
} else {
|
|
32
30
|
const errors = Cause.prettyErrors(exit.cause);
|
|
33
31
|
for (let i = 1; i < errors.length; i++) {
|
|
@@ -39,6 +37,8 @@ const runTest = ctx => effect => Effect.gen(function* () {
|
|
|
39
37
|
}
|
|
40
38
|
}).pipe(Effect.runPromise).then(f => f());
|
|
41
39
|
/** @internal */
|
|
40
|
+
const runTest = ctx => effect => runPromise(ctx)(Effect.asVoid(effect));
|
|
41
|
+
/** @internal */
|
|
42
42
|
const TestEnv = /*#__PURE__*/TestEnvironment.TestContext.pipe( /*#__PURE__*/Layer.provide( /*#__PURE__*/Logger.remove(Logger.defaultLogger)));
|
|
43
43
|
/** @internal */
|
|
44
44
|
function customTester(a, b, customTesters) {
|
|
@@ -72,6 +72,33 @@ const makeTester = mapEffect => {
|
|
|
72
72
|
});
|
|
73
73
|
};
|
|
74
74
|
/** @internal */
|
|
75
|
+
const layer = (layer_, memoMap) => (...args) => {
|
|
76
|
+
memoMap = memoMap ?? Effect.runSync(Layer.makeMemoMap);
|
|
77
|
+
const scope = Effect.runSync(Scope.make());
|
|
78
|
+
const runtimeEffect = Layer.toRuntimeWithMemoMap(layer_, memoMap).pipe(Scope.extend(scope), Effect.orDie, Effect.cached, Effect.runSync);
|
|
79
|
+
const it = Object.assign(V.it, {
|
|
80
|
+
effect: makeTester(effect => Effect.flatMap(runtimeEffect, runtime => effect.pipe(Effect.provide(runtime), Effect.provide(TestEnv)))),
|
|
81
|
+
scoped: makeTester(effect => Effect.flatMap(runtimeEffect, runtime => effect.pipe(Effect.scoped, Effect.provide(runtime), Effect.provide(TestEnv)))),
|
|
82
|
+
live: makeTester(effect => Effect.flatMap(runtimeEffect, runtime => Effect.provide(effect, runtime))),
|
|
83
|
+
scopedLive: makeTester(effect => Effect.flatMap(runtimeEffect, runtime => effect.pipe(Effect.scoped, Effect.provide(runtime)))),
|
|
84
|
+
flakyTest,
|
|
85
|
+
layer(nestedLayer) {
|
|
86
|
+
return layer(Layer.provideMerge(nestedLayer, layer_), memoMap);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
if (args.length === 1) {
|
|
90
|
+
V.beforeAll(() => runPromise()(Effect.asVoid(runtimeEffect)));
|
|
91
|
+
V.afterAll(() => runPromise()(Scope.close(scope, Exit.void)));
|
|
92
|
+
return args[0](it);
|
|
93
|
+
}
|
|
94
|
+
return V.describe(args[0], () => {
|
|
95
|
+
V.beforeAll(() => runPromise()(Effect.asVoid(runtimeEffect)));
|
|
96
|
+
V.afterAll(() => runPromise()(Scope.close(scope, Exit.void)));
|
|
97
|
+
return args[1](it);
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
/** @internal */
|
|
101
|
+
exports.layer = layer;
|
|
75
102
|
const effect = exports.effect = /*#__PURE__*/makeTester( /*#__PURE__*/Effect.provide(TestEnv));
|
|
76
103
|
/** @internal */
|
|
77
104
|
const scoped = exports.scoped = /*#__PURE__*/makeTester( /*#__PURE__*/(0, _Function.flow)(Effect.scoped, /*#__PURE__*/Effect.provide(TestEnv)));
|
package/dist/cjs/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","names":["Cause","_interopRequireWildcard","require","Duration","Effect","Equal","Exit","Fiber","_Function","Layer","Logger","
|
|
1
|
+
{"version":3,"file":"internal.js","names":["Cause","_interopRequireWildcard","require","Duration","Effect","Equal","Exit","Fiber","_Function","Layer","Logger","Schedule","Scope","TestEnvironment","Utils","V","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","runPromise","ctx","effect","gen","exitFiber","fork","exit","onTestFinished","interrupt","pipe","asVoid","join","isSuccess","value","errors","prettyErrors","cause","length","logError","then","f","runTest","TestEnv","TestContext","provide","remove","defaultLogger","customTester","b","customTesters","isEqual","undefined","structuralRegion","equals","x","y","filter","addEqualityTesters","expect","exports","makeTester","mapEffect","run","args","self","suspend","name","timeout","it","skip","skipIf","condition","runIf","only","each","cases","for","assign","layer","layer_","memoMap","runSync","makeMemoMap","scope","make","runtimeEffect","toRuntimeWithMemoMap","extend","orDie","cached","flatMap","runtime","scoped","live","scopedLive","flakyTest","nestedLayer","provideMerge","beforeAll","afterAll","close","void","describe","flow","identity","seconds","catchAllDefect","fail","retry","recurs","compose","elapsed","whileOutput","lessThanOrEqualTo"],"sources":["../../src/internal.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/dts/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type * as Duration from "effect/Duration";
|
|
5
5
|
import type * as Effect from "effect/Effect";
|
|
6
|
+
import type * as Layer from "effect/Layer";
|
|
6
7
|
import type * as Scope from "effect/Scope";
|
|
7
8
|
import type * as TestServices from "effect/TestServices";
|
|
8
9
|
import * as V from "vitest";
|
|
@@ -36,6 +37,20 @@ export declare namespace Vitest {
|
|
|
36
37
|
only: Vitest.Test<R>;
|
|
37
38
|
each: <T>(cases: ReadonlyArray<T>) => <A, E>(name: string, self: TestFunction<A, E, R, Array<T>>, timeout?: number | V.TestOptions) => void;
|
|
38
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* @since 1.0.0
|
|
42
|
+
*/
|
|
43
|
+
interface Methods<R = never> extends API {
|
|
44
|
+
readonly effect: Vitest.Tester<TestServices.TestServices | R>;
|
|
45
|
+
readonly live: Vitest.Tester<R>;
|
|
46
|
+
readonly flakyTest: <A, E, R2>(self: Effect.Effect<A, E, R2>, timeout?: Duration.DurationInput) => Effect.Effect<A, never, R2>;
|
|
47
|
+
readonly scoped: Vitest.Tester<TestServices.TestServices | Scope.Scope | R>;
|
|
48
|
+
readonly scopedLive: Vitest.Tester<Scope.Scope | R>;
|
|
49
|
+
readonly layer: <R2, E>(layer: Layer.Layer<R2, E, R>) => {
|
|
50
|
+
(f: (it: Vitest.Methods<R | R2>) => void): void;
|
|
51
|
+
(name: string, f: (it: Vitest.Methods<R | R2>) => void): void;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
39
54
|
}
|
|
40
55
|
/**
|
|
41
56
|
* @since 1.0.0
|
|
@@ -58,21 +73,59 @@ export declare const live: Vitest.Tester<never>;
|
|
|
58
73
|
*/
|
|
59
74
|
export declare const scopedLive: Vitest.Tester<Scope.Scope>;
|
|
60
75
|
/**
|
|
76
|
+
* Share a `Layer` between multiple tests, optionally wrapping
|
|
77
|
+
* the tests in a `describe` block if a name is provided.
|
|
78
|
+
*
|
|
61
79
|
* @since 1.0.0
|
|
80
|
+
*
|
|
81
|
+
* ```ts
|
|
82
|
+
* import { expect, layer } from "@effect/vitest"
|
|
83
|
+
* import { Context, Effect, Layer } from "effect"
|
|
84
|
+
*
|
|
85
|
+
* class Foo extends Context.Tag("Foo")<Foo, "foo">() {
|
|
86
|
+
* static Live = Layer.succeed(Foo, "foo")
|
|
87
|
+
* }
|
|
88
|
+
*
|
|
89
|
+
* class Bar extends Context.Tag("Bar")<Bar, "bar">() {
|
|
90
|
+
* static Live = Layer.effect(
|
|
91
|
+
* Bar,
|
|
92
|
+
* Effect.map(Foo, () => "bar" as const)
|
|
93
|
+
* )
|
|
94
|
+
* }
|
|
95
|
+
*
|
|
96
|
+
* layer(Foo.Live)("layer", (it) => {
|
|
97
|
+
* it.effect("adds context", () =>
|
|
98
|
+
* Effect.gen(function* () {
|
|
99
|
+
* const foo = yield* Foo
|
|
100
|
+
* expect(foo).toEqual("foo")
|
|
101
|
+
* })
|
|
102
|
+
* )
|
|
103
|
+
*
|
|
104
|
+
* it.layer(Bar.Live)("nested", (it) => {
|
|
105
|
+
* it.effect("adds context", () =>
|
|
106
|
+
* Effect.gen(function* () {
|
|
107
|
+
* const foo = yield* Foo
|
|
108
|
+
* const bar = yield* Bar
|
|
109
|
+
* expect(foo).toEqual("foo")
|
|
110
|
+
* expect(bar).toEqual("bar")
|
|
111
|
+
* })
|
|
112
|
+
* )
|
|
113
|
+
* })
|
|
114
|
+
* })
|
|
115
|
+
* ```
|
|
62
116
|
*/
|
|
63
|
-
export declare const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
readonly effect: Vitest.Tester<TestServices.TestServices>;
|
|
67
|
-
readonly live: Vitest.Tester<never>;
|
|
68
|
-
readonly flakyTest: <A, E, R>(self: Effect.Effect<A, E, R>, timeout?: Duration.DurationInput) => Effect.Effect<A, never, R>;
|
|
69
|
-
readonly scoped: Vitest.Tester<TestServices.TestServices | Scope.Scope>;
|
|
70
|
-
readonly scopedLive: Vitest.Tester<Scope.Scope>;
|
|
117
|
+
export declare const layer: <R, E>(layer_: Layer.Layer<R, E>, memoMap?: Layer.MemoMap) => {
|
|
118
|
+
(f: (it: Vitest.Methods<R>) => void): void;
|
|
119
|
+
(name: string, f: (it: Vitest.Methods<R>) => void): void;
|
|
71
120
|
};
|
|
72
121
|
/**
|
|
73
122
|
* @since 1.0.0
|
|
74
123
|
*/
|
|
75
|
-
export declare const
|
|
124
|
+
export declare const flakyTest: <A, E, R>(self: Effect.Effect<A, E, R>, timeout?: Duration.DurationInput) => Effect.Effect<A, never, R>;
|
|
125
|
+
/**
|
|
126
|
+
* @since 1.0.0
|
|
127
|
+
*/
|
|
128
|
+
export declare const it: Vitest.Methods;
|
|
76
129
|
/**
|
|
77
130
|
* @since 1.0.0
|
|
78
131
|
*/
|
package/dist/dts/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,KAAK,YAAY,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAG3B;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAE/B;;GAEG;AACH,yBAAiB,MAAM,CAAC;IACtB;;OAEG;IACH,UAAiB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,SAAS,KAAK,CAAC,GAAG,CAAC;QAChE,CAAC,GAAG,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;KAC5C;IAED;;OAEG;IACH,UAAiB,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,EAAE,CAAC,EACH,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,EAClF,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,WAAW,GAC/B,IAAI,CAAA;KACR;IAED;;OAEG;IACH,UAAiB,MAAM,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9C,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC7C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,EAAE,CAAC,CAAC,EACN,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KACpB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,WAAW,KAAK,IAAI,CAAA;KAC3G;CACF;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,KAAK,YAAY,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAG3B;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAE/B;;GAEG;AACH,yBAAiB,MAAM,CAAC;IACtB;;OAEG;IACH,UAAiB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,SAAS,KAAK,CAAC,GAAG,CAAC;QAChE,CAAC,GAAG,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;KAC5C;IAED;;OAEG;IACH,UAAiB,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,EAAE,CAAC,EACH,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,EAClF,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,WAAW,GAC/B,IAAI,CAAA;KACR;IAED;;OAEG;IACH,UAAiB,MAAM,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9C,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC7C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,EAAE,CAAC,CAAC,EACN,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KACpB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,WAAW,KAAK,IAAI,CAAA;KAC3G;IAED;;OAEG;IACH,UAAiB,OAAO,CAAC,CAAC,GAAG,KAAK,CAAE,SAAQ,GAAG;QAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;QAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC/B,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAC7B,OAAO,CAAC,EAAE,QAAQ,CAAC,aAAa,KAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;QAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QAC3E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QACnD,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK;YACvD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;YAC/C,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;SAC9D,CAAA;KACF;CACF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,IAAkC,CAAA;AAEzE;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAmB,CAAA;AAE/E;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAmB,CAAA;AAE7F;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAiB,CAAA;AAEvD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAuB,CAAA;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EACvB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,KACpB;IACH,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;IAC1C,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;CACxC,CAAA;AAElB;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5B,OAAO,CAAC,EAAE,QAAQ,CAAC,aAAa,KAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAsB,CAAA;AAKpD;;GAEG;AACH,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,OAAsC,CAAA;AAE9D;;GAEG;AACH,cAAc,QAAQ,CAAA"}
|
package/dist/esm/index.js
CHANGED
|
@@ -20,6 +20,49 @@ export const live = internal.live;
|
|
|
20
20
|
* @since 1.0.0
|
|
21
21
|
*/
|
|
22
22
|
export const scopedLive = internal.scopedLive;
|
|
23
|
+
/**
|
|
24
|
+
* Share a `Layer` between multiple tests, optionally wrapping
|
|
25
|
+
* the tests in a `describe` block if a name is provided.
|
|
26
|
+
*
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
*
|
|
29
|
+
* ```ts
|
|
30
|
+
* import { expect, layer } from "@effect/vitest"
|
|
31
|
+
* import { Context, Effect, Layer } from "effect"
|
|
32
|
+
*
|
|
33
|
+
* class Foo extends Context.Tag("Foo")<Foo, "foo">() {
|
|
34
|
+
* static Live = Layer.succeed(Foo, "foo")
|
|
35
|
+
* }
|
|
36
|
+
*
|
|
37
|
+
* class Bar extends Context.Tag("Bar")<Bar, "bar">() {
|
|
38
|
+
* static Live = Layer.effect(
|
|
39
|
+
* Bar,
|
|
40
|
+
* Effect.map(Foo, () => "bar" as const)
|
|
41
|
+
* )
|
|
42
|
+
* }
|
|
43
|
+
*
|
|
44
|
+
* layer(Foo.Live)("layer", (it) => {
|
|
45
|
+
* it.effect("adds context", () =>
|
|
46
|
+
* Effect.gen(function* () {
|
|
47
|
+
* const foo = yield* Foo
|
|
48
|
+
* expect(foo).toEqual("foo")
|
|
49
|
+
* })
|
|
50
|
+
* )
|
|
51
|
+
*
|
|
52
|
+
* it.layer(Bar.Live)("nested", (it) => {
|
|
53
|
+
* it.effect("adds context", () =>
|
|
54
|
+
* Effect.gen(function* () {
|
|
55
|
+
* const foo = yield* Foo
|
|
56
|
+
* const bar = yield* Bar
|
|
57
|
+
* expect(foo).toEqual("foo")
|
|
58
|
+
* expect(bar).toEqual("bar")
|
|
59
|
+
* })
|
|
60
|
+
* )
|
|
61
|
+
* })
|
|
62
|
+
* })
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export const layer = internal.layer;
|
|
23
66
|
/**
|
|
24
67
|
* @since 1.0.0
|
|
25
68
|
*/
|
|
@@ -30,7 +73,8 @@ const methods = {
|
|
|
30
73
|
live,
|
|
31
74
|
flakyTest,
|
|
32
75
|
scoped,
|
|
33
|
-
scopedLive
|
|
76
|
+
scopedLive,
|
|
77
|
+
layer
|
|
34
78
|
};
|
|
35
79
|
/**
|
|
36
80
|
* @since 1.0.0
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["V","internal","addEqualityTesters","effect","scoped","live","scopedLive","flakyTest","methods","it","Object","assign"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["V","internal","addEqualityTesters","effect","scoped","live","scopedLive","layer","flakyTest","methods","it","Object","assign"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAQA,OAAO,KAAKA,CAAC,MAAM,QAAQ;AAC3B,OAAO,KAAKC,QAAQ,MAAM,eAAe;AA6DzC;;;AAGA,OAAO,MAAMC,kBAAkB,GAAeD,QAAQ,CAACC,kBAAkB;AAEzE;;;AAGA,OAAO,MAAMC,MAAM,GAA6CF,QAAQ,CAACE,MAAM;AAE/E;;;AAGA,OAAO,MAAMC,MAAM,GAA2DH,QAAQ,CAACG,MAAM;AAE7F;;;AAGA,OAAO,MAAMC,IAAI,GAAyBJ,QAAQ,CAACI,IAAI;AAEvD;;;AAGA,OAAO,MAAMC,UAAU,GAA+BL,QAAQ,CAACK,UAAU;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,OAAO,MAAMC,KAAK,GAMdN,QAAQ,CAACM,KAAK;AAElB;;;AAGA,OAAO,MAAMC,SAAS,GAGYP,QAAQ,CAACO,SAAS;AAEpD;AACA,MAAMC,OAAO,GAAG;EAAEN,MAAM;EAAEE,IAAI;EAAEG,SAAS;EAAEJ,MAAM;EAAEE,UAAU;EAAEC;AAAK,CAAW;AAE/E;;;AAGA,OAAO,MAAMG,EAAE,gBAAmBC,MAAM,CAACC,MAAM,CAACZ,CAAC,CAACU,EAAE,EAAED,OAAO,CAAC;AAE9D;;;AAGA,cAAc,QAAQ","ignoreList":[]}
|
package/dist/esm/internal.js
CHANGED
|
@@ -7,19 +7,17 @@ import * as Fiber from "effect/Fiber";
|
|
|
7
7
|
import { flow, identity, pipe } from "effect/Function";
|
|
8
8
|
import * as Layer from "effect/Layer";
|
|
9
9
|
import * as Logger from "effect/Logger";
|
|
10
|
-
import * as Runtime from "effect/Runtime";
|
|
11
10
|
import * as Schedule from "effect/Schedule";
|
|
11
|
+
import * as Scope from "effect/Scope";
|
|
12
12
|
import * as TestEnvironment from "effect/TestContext";
|
|
13
13
|
import * as Utils from "effect/Utils";
|
|
14
14
|
import * as V from "vitest";
|
|
15
|
-
|
|
16
|
-
const runTest = ctx => effect => Effect.gen(function* () {
|
|
15
|
+
const runPromise = ctx => effect => Effect.gen(function* () {
|
|
17
16
|
const exitFiber = yield* Effect.fork(Effect.exit(effect));
|
|
18
|
-
|
|
19
|
-
ctx.onTestFinished(() => Fiber.interrupt(exitFiber).pipe(Effect.asVoid, Runtime.runPromise(runtime)));
|
|
17
|
+
ctx?.onTestFinished(() => Fiber.interrupt(exitFiber).pipe(Effect.asVoid, Effect.runPromise));
|
|
20
18
|
const exit = yield* Fiber.join(exitFiber);
|
|
21
19
|
if (Exit.isSuccess(exit)) {
|
|
22
|
-
return () =>
|
|
20
|
+
return () => exit.value;
|
|
23
21
|
} else {
|
|
24
22
|
const errors = Cause.prettyErrors(exit.cause);
|
|
25
23
|
for (let i = 1; i < errors.length; i++) {
|
|
@@ -31,6 +29,8 @@ const runTest = ctx => effect => Effect.gen(function* () {
|
|
|
31
29
|
}
|
|
32
30
|
}).pipe(Effect.runPromise).then(f => f());
|
|
33
31
|
/** @internal */
|
|
32
|
+
const runTest = ctx => effect => runPromise(ctx)(Effect.asVoid(effect));
|
|
33
|
+
/** @internal */
|
|
34
34
|
const TestEnv = /*#__PURE__*/TestEnvironment.TestContext.pipe( /*#__PURE__*/Layer.provide( /*#__PURE__*/Logger.remove(Logger.defaultLogger)));
|
|
35
35
|
/** @internal */
|
|
36
36
|
function customTester(a, b, customTesters) {
|
|
@@ -63,6 +63,32 @@ const makeTester = mapEffect => {
|
|
|
63
63
|
});
|
|
64
64
|
};
|
|
65
65
|
/** @internal */
|
|
66
|
+
export const layer = (layer_, memoMap) => (...args) => {
|
|
67
|
+
memoMap = memoMap ?? Effect.runSync(Layer.makeMemoMap);
|
|
68
|
+
const scope = Effect.runSync(Scope.make());
|
|
69
|
+
const runtimeEffect = Layer.toRuntimeWithMemoMap(layer_, memoMap).pipe(Scope.extend(scope), Effect.orDie, Effect.cached, Effect.runSync);
|
|
70
|
+
const it = Object.assign(V.it, {
|
|
71
|
+
effect: makeTester(effect => Effect.flatMap(runtimeEffect, runtime => effect.pipe(Effect.provide(runtime), Effect.provide(TestEnv)))),
|
|
72
|
+
scoped: makeTester(effect => Effect.flatMap(runtimeEffect, runtime => effect.pipe(Effect.scoped, Effect.provide(runtime), Effect.provide(TestEnv)))),
|
|
73
|
+
live: makeTester(effect => Effect.flatMap(runtimeEffect, runtime => Effect.provide(effect, runtime))),
|
|
74
|
+
scopedLive: makeTester(effect => Effect.flatMap(runtimeEffect, runtime => effect.pipe(Effect.scoped, Effect.provide(runtime)))),
|
|
75
|
+
flakyTest,
|
|
76
|
+
layer(nestedLayer) {
|
|
77
|
+
return layer(Layer.provideMerge(nestedLayer, layer_), memoMap);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
if (args.length === 1) {
|
|
81
|
+
V.beforeAll(() => runPromise()(Effect.asVoid(runtimeEffect)));
|
|
82
|
+
V.afterAll(() => runPromise()(Scope.close(scope, Exit.void)));
|
|
83
|
+
return args[0](it);
|
|
84
|
+
}
|
|
85
|
+
return V.describe(args[0], () => {
|
|
86
|
+
V.beforeAll(() => runPromise()(Effect.asVoid(runtimeEffect)));
|
|
87
|
+
V.afterAll(() => runPromise()(Scope.close(scope, Exit.void)));
|
|
88
|
+
return args[1](it);
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
/** @internal */
|
|
66
92
|
export const effect = /*#__PURE__*/makeTester( /*#__PURE__*/Effect.provide(TestEnv));
|
|
67
93
|
/** @internal */
|
|
68
94
|
export const scoped = /*#__PURE__*/makeTester( /*#__PURE__*/flow(Effect.scoped, /*#__PURE__*/Effect.provide(TestEnv)));
|
package/dist/esm/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","names":["Cause","Duration","Effect","Equal","Exit","Fiber","flow","identity","pipe","Layer","Logger","
|
|
1
|
+
{"version":3,"file":"internal.js","names":["Cause","Duration","Effect","Equal","Exit","Fiber","flow","identity","pipe","Layer","Logger","Schedule","Scope","TestEnvironment","Utils","V","runPromise","ctx","effect","gen","exitFiber","fork","exit","onTestFinished","interrupt","asVoid","join","isSuccess","value","errors","prettyErrors","cause","i","length","logError","then","f","runTest","TestEnv","TestContext","provide","remove","defaultLogger","customTester","a","b","customTesters","isEqual","undefined","structuralRegion","equals","x","y","filter","t","addEqualityTesters","expect","makeTester","mapEffect","run","args","self","suspend","name","timeout","it","skip","skipIf","condition","runIf","only","each","cases","for","Object","assign","layer","layer_","memoMap","runSync","makeMemoMap","scope","make","runtimeEffect","toRuntimeWithMemoMap","extend","orDie","cached","flatMap","runtime","scoped","live","scopedLive","flakyTest","nestedLayer","provideMerge","beforeAll","afterAll","close","void","describe","seconds","catchAllDefect","fail","retry","recurs","compose","elapsed","whileOutput","lessThanOrEqualTo"],"sources":["../../src/internal.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/vitest",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.6",
|
|
4
4
|
"description": "A set of helpers for testing Effects with vitest",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"sideEffects": [],
|
|
12
12
|
"peerDependencies": {
|
|
13
13
|
"vitest": "^2.0.5",
|
|
14
|
-
"effect": "^3.8.
|
|
14
|
+
"effect": "^3.8.5"
|
|
15
15
|
},
|
|
16
16
|
"publishConfig": {
|
|
17
17
|
"provenance": true
|
package/src/index.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type * as Duration from "effect/Duration"
|
|
5
5
|
import type * as Effect from "effect/Effect"
|
|
6
|
+
import type * as Layer from "effect/Layer"
|
|
6
7
|
import type * as Scope from "effect/Scope"
|
|
7
8
|
import type * as TestServices from "effect/TestServices"
|
|
8
9
|
import * as V from "vitest"
|
|
@@ -47,7 +48,26 @@ export namespace Vitest {
|
|
|
47
48
|
cases: ReadonlyArray<T>
|
|
48
49
|
) => <A, E>(name: string, self: TestFunction<A, E, R, Array<T>>, timeout?: number | V.TestOptions) => void
|
|
49
50
|
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @since 1.0.0
|
|
54
|
+
*/
|
|
55
|
+
export interface Methods<R = never> extends API {
|
|
56
|
+
readonly effect: Vitest.Tester<TestServices.TestServices | R>
|
|
57
|
+
readonly live: Vitest.Tester<R>
|
|
58
|
+
readonly flakyTest: <A, E, R2>(
|
|
59
|
+
self: Effect.Effect<A, E, R2>,
|
|
60
|
+
timeout?: Duration.DurationInput
|
|
61
|
+
) => Effect.Effect<A, never, R2>
|
|
62
|
+
readonly scoped: Vitest.Tester<TestServices.TestServices | Scope.Scope | R>
|
|
63
|
+
readonly scopedLive: Vitest.Tester<Scope.Scope | R>
|
|
64
|
+
readonly layer: <R2, E>(layer: Layer.Layer<R2, E, R>) => {
|
|
65
|
+
(f: (it: Vitest.Methods<R | R2>) => void): void
|
|
66
|
+
(name: string, f: (it: Vitest.Methods<R | R2>) => void): void
|
|
67
|
+
}
|
|
68
|
+
}
|
|
50
69
|
}
|
|
70
|
+
|
|
51
71
|
/**
|
|
52
72
|
* @since 1.0.0
|
|
53
73
|
*/
|
|
@@ -73,6 +93,56 @@ export const live: Vitest.Tester<never> = internal.live
|
|
|
73
93
|
*/
|
|
74
94
|
export const scopedLive: Vitest.Tester<Scope.Scope> = internal.scopedLive
|
|
75
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Share a `Layer` between multiple tests, optionally wrapping
|
|
98
|
+
* the tests in a `describe` block if a name is provided.
|
|
99
|
+
*
|
|
100
|
+
* @since 1.0.0
|
|
101
|
+
*
|
|
102
|
+
* ```ts
|
|
103
|
+
* import { expect, layer } from "@effect/vitest"
|
|
104
|
+
* import { Context, Effect, Layer } from "effect"
|
|
105
|
+
*
|
|
106
|
+
* class Foo extends Context.Tag("Foo")<Foo, "foo">() {
|
|
107
|
+
* static Live = Layer.succeed(Foo, "foo")
|
|
108
|
+
* }
|
|
109
|
+
*
|
|
110
|
+
* class Bar extends Context.Tag("Bar")<Bar, "bar">() {
|
|
111
|
+
* static Live = Layer.effect(
|
|
112
|
+
* Bar,
|
|
113
|
+
* Effect.map(Foo, () => "bar" as const)
|
|
114
|
+
* )
|
|
115
|
+
* }
|
|
116
|
+
*
|
|
117
|
+
* layer(Foo.Live)("layer", (it) => {
|
|
118
|
+
* it.effect("adds context", () =>
|
|
119
|
+
* Effect.gen(function* () {
|
|
120
|
+
* const foo = yield* Foo
|
|
121
|
+
* expect(foo).toEqual("foo")
|
|
122
|
+
* })
|
|
123
|
+
* )
|
|
124
|
+
*
|
|
125
|
+
* it.layer(Bar.Live)("nested", (it) => {
|
|
126
|
+
* it.effect("adds context", () =>
|
|
127
|
+
* Effect.gen(function* () {
|
|
128
|
+
* const foo = yield* Foo
|
|
129
|
+
* const bar = yield* Bar
|
|
130
|
+
* expect(foo).toEqual("foo")
|
|
131
|
+
* expect(bar).toEqual("bar")
|
|
132
|
+
* })
|
|
133
|
+
* )
|
|
134
|
+
* })
|
|
135
|
+
* })
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
export const layer: <R, E>(
|
|
139
|
+
layer_: Layer.Layer<R, E>,
|
|
140
|
+
memoMap?: Layer.MemoMap
|
|
141
|
+
) => {
|
|
142
|
+
(f: (it: Vitest.Methods<R>) => void): void
|
|
143
|
+
(name: string, f: (it: Vitest.Methods<R>) => void): void
|
|
144
|
+
} = internal.layer
|
|
145
|
+
|
|
76
146
|
/**
|
|
77
147
|
* @since 1.0.0
|
|
78
148
|
*/
|
|
@@ -82,12 +152,12 @@ export const flakyTest: <A, E, R>(
|
|
|
82
152
|
) => Effect.Effect<A, never, R> = internal.flakyTest
|
|
83
153
|
|
|
84
154
|
/** @ignored */
|
|
85
|
-
const methods = { effect, live, flakyTest, scoped, scopedLive } as const
|
|
155
|
+
const methods = { effect, live, flakyTest, scoped, scopedLive, layer } as const
|
|
86
156
|
|
|
87
157
|
/**
|
|
88
158
|
* @since 1.0.0
|
|
89
159
|
*/
|
|
90
|
-
export const it:
|
|
160
|
+
export const it: Vitest.Methods = Object.assign(V.it, methods)
|
|
91
161
|
|
|
92
162
|
/**
|
|
93
163
|
* @since 1.0.0
|
package/src/internal.ts
CHANGED
|
@@ -11,31 +11,28 @@ import * as Fiber from "effect/Fiber"
|
|
|
11
11
|
import { flow, identity, pipe } from "effect/Function"
|
|
12
12
|
import * as Layer from "effect/Layer"
|
|
13
13
|
import * as Logger from "effect/Logger"
|
|
14
|
-
import * as Runtime from "effect/Runtime"
|
|
15
14
|
import * as Schedule from "effect/Schedule"
|
|
16
|
-
import
|
|
15
|
+
import * as Scope from "effect/Scope"
|
|
17
16
|
import * as TestEnvironment from "effect/TestContext"
|
|
18
17
|
import type * as TestServices from "effect/TestServices"
|
|
19
18
|
import * as Utils from "effect/Utils"
|
|
20
19
|
import * as V from "vitest"
|
|
21
20
|
import type * as Vitest from "./index.js"
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
const runTest = (ctx: Vitest.TaskContext) => <E, A>(effect: Effect.Effect<A, E>) =>
|
|
22
|
+
const runPromise = (ctx?: Vitest.TaskContext) => <E, A>(effect: Effect.Effect<A, E>) =>
|
|
25
23
|
Effect.gen(function*() {
|
|
26
24
|
const exitFiber = yield* Effect.fork(Effect.exit(effect))
|
|
27
|
-
const runtime = yield* Effect.runtime()
|
|
28
25
|
|
|
29
|
-
ctx
|
|
26
|
+
ctx?.onTestFinished(() =>
|
|
30
27
|
Fiber.interrupt(exitFiber).pipe(
|
|
31
28
|
Effect.asVoid,
|
|
32
|
-
|
|
29
|
+
Effect.runPromise
|
|
33
30
|
)
|
|
34
31
|
)
|
|
35
32
|
|
|
36
33
|
const exit = yield* Fiber.join(exitFiber)
|
|
37
34
|
if (Exit.isSuccess(exit)) {
|
|
38
|
-
return () =>
|
|
35
|
+
return () => exit.value
|
|
39
36
|
} else {
|
|
40
37
|
const errors = Cause.prettyErrors(exit.cause)
|
|
41
38
|
for (let i = 1; i < errors.length; i++) {
|
|
@@ -47,6 +44,10 @@ const runTest = (ctx: Vitest.TaskContext) => <E, A>(effect: Effect.Effect<A, E>)
|
|
|
47
44
|
}
|
|
48
45
|
}).pipe(Effect.runPromise).then((f) => f())
|
|
49
46
|
|
|
47
|
+
/** @internal */
|
|
48
|
+
const runTest = (ctx?: Vitest.TaskContext) => <E, A>(effect: Effect.Effect<A, E>) =>
|
|
49
|
+
runPromise(ctx)(Effect.asVoid(effect))
|
|
50
|
+
|
|
50
51
|
/** @internal */
|
|
51
52
|
const TestEnv = TestEnvironment.TestContext.pipe(
|
|
52
53
|
Layer.provide(Logger.remove(Logger.defaultLogger))
|
|
@@ -98,6 +99,71 @@ const makeTester = <R>(
|
|
|
98
99
|
return Object.assign(f, { skip, skipIf, runIf, only, each })
|
|
99
100
|
}
|
|
100
101
|
|
|
102
|
+
/** @internal */
|
|
103
|
+
export const layer = <R, E>(layer_: Layer.Layer<R, E>, memoMap?: Layer.MemoMap): {
|
|
104
|
+
(f: (it: Vitest.Vitest.Methods<R>) => void): void
|
|
105
|
+
(name: string, f: (it: Vitest.Vitest.Methods<R>) => void): void
|
|
106
|
+
} =>
|
|
107
|
+
(
|
|
108
|
+
...args: [name: string, f: (it: Vitest.Vitest.Methods<R>) => void] | [f: (it: Vitest.Vitest.Methods<R>) => void]
|
|
109
|
+
) => {
|
|
110
|
+
memoMap = memoMap ?? Effect.runSync(Layer.makeMemoMap)
|
|
111
|
+
const scope = Effect.runSync(Scope.make())
|
|
112
|
+
const runtimeEffect = Layer.toRuntimeWithMemoMap(layer_, memoMap).pipe(
|
|
113
|
+
Scope.extend(scope),
|
|
114
|
+
Effect.orDie,
|
|
115
|
+
Effect.cached,
|
|
116
|
+
Effect.runSync
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
const it: Vitest.Vitest.Methods<R> = Object.assign(V.it, {
|
|
120
|
+
effect: makeTester<TestServices.TestServices | R>((effect) =>
|
|
121
|
+
Effect.flatMap(runtimeEffect, (runtime) =>
|
|
122
|
+
effect.pipe(
|
|
123
|
+
Effect.provide(runtime),
|
|
124
|
+
Effect.provide(TestEnv)
|
|
125
|
+
))
|
|
126
|
+
),
|
|
127
|
+
scoped: makeTester<TestServices.TestServices | Scope.Scope | R>((effect) =>
|
|
128
|
+
Effect.flatMap(runtimeEffect, (runtime) =>
|
|
129
|
+
effect.pipe(
|
|
130
|
+
Effect.scoped,
|
|
131
|
+
Effect.provide(runtime),
|
|
132
|
+
Effect.provide(TestEnv)
|
|
133
|
+
))
|
|
134
|
+
),
|
|
135
|
+
live: makeTester<R>((effect) =>
|
|
136
|
+
Effect.flatMap(
|
|
137
|
+
runtimeEffect,
|
|
138
|
+
(runtime) => Effect.provide(effect, runtime)
|
|
139
|
+
)
|
|
140
|
+
),
|
|
141
|
+
scopedLive: makeTester<Scope.Scope | R>((effect) =>
|
|
142
|
+
Effect.flatMap(runtimeEffect, (runtime) =>
|
|
143
|
+
effect.pipe(
|
|
144
|
+
Effect.scoped,
|
|
145
|
+
Effect.provide(runtime)
|
|
146
|
+
))
|
|
147
|
+
),
|
|
148
|
+
flakyTest,
|
|
149
|
+
layer<R2, E2>(nestedLayer: Layer.Layer<R2, E2, R>) {
|
|
150
|
+
return layer(Layer.provideMerge(nestedLayer, layer_), memoMap)
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
if (args.length === 1) {
|
|
155
|
+
V.beforeAll(() => runPromise()(Effect.asVoid(runtimeEffect)))
|
|
156
|
+
V.afterAll(() => runPromise()(Scope.close(scope, Exit.void)))
|
|
157
|
+
return args[0](it)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return V.describe(args[0], () => {
|
|
161
|
+
V.beforeAll(() => runPromise()(Effect.asVoid(runtimeEffect)))
|
|
162
|
+
V.afterAll(() => runPromise()(Scope.close(scope, Exit.void)))
|
|
163
|
+
return args[1](it)
|
|
164
|
+
})
|
|
165
|
+
}
|
|
166
|
+
|
|
101
167
|
/** @internal */
|
|
102
168
|
export const effect = makeTester<TestServices.TestServices>(Effect.provide(TestEnv))
|
|
103
169
|
|