testeranto 0.143.0 → 0.146.1
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/.aider.chat.history.md +1833 -0
- package/.aider.input.history +105 -0
- package/.aider.tags.cache.v3/{be/72/19ee8e656d160afe9b31523245fe.val → 06/1a/1ec9fd1f595d4b36094caef45894.val} +0 -0
- package/.aider.tags.cache.v3/{63/f1/138061b0aadb868173d197c2a0e0.val → 0f/f6/f42b5108253d75de3cb6286df7f6.val} +0 -0
- package/.aider.tags.cache.v3/cache.db +0 -0
- package/README.md +22 -23
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/index.md +45 -33
- package/package.json +1 -1
- package/src/Node.ts +17 -13
- package/src/PM/PM_WithEslintAndTsc.ts +71 -69
- package/src/PM/main.ts +182 -92
- package/src/PM/node.ts +1 -15
- package/src/PM/nodeSidecar.ts +0 -1
- package/src/Pure.ts +20 -2
- package/src/Types.ts +5 -5
- package/src/Web.ts +1 -1
- package/src/build.ts +0 -1
- package/src/esbuildConfigs/consoleDetectorPlugin.ts +28 -14
- package/src/esbuildConfigs/nativeImportDetectorPlugin.ts +26 -0
- package/src/esbuildConfigs/pure.ts +3 -1
- package/src/esbuildConfigs/rebuildPlugin.ts +1 -4
- package/src/lib/BaseSuite.test/node.test.ts +12 -0
- package/src/lib/BaseSuite.test/pure.test.ts +12 -0
- package/src/lib/{BaseSuite.test.ts → BaseSuite.test/test.ts} +20 -30
- package/src/lib/BaseSuite.test/web.test.ts +12 -0
- package/src/lib/BaseSuite.ts +17 -15
- package/src/lib/abstractBase.ts +0 -2
- package/src/lib/baseBuilder.test/baseBuilder.test.implementation.ts +2 -1
- package/src/lib/baseBuilder.test/baseBuilder.test.node.ts +14 -0
- package/src/lib/baseBuilder.test/baseBuilder.test.pure.ts +14 -0
- package/src/lib/baseBuilder.test/{baseBuilder.test.ts → baseBuilder.test.web.ts} +2 -1
- package/src/lib/basebuilder.ts +2 -1
- package/src/lib/classBuilder.test/classBuilder.test.implementation.ts +6 -2
- package/src/lib/classBuilder.test/classBuilder.test.interface.ts +1 -0
- package/src/lib/classBuilder.test/classBuilder.test.specification.ts +5 -4
- package/src/lib/classBuilder.test/classBuilder.test.types.ts +17 -5
- package/src/lib/core.ts +0 -10
- package/src/lib/pmProxy.test/interface.ts +0 -1
- package/src/run.ts +7 -7
- package/testeranto/bundles/node/allTests/{chunk-RX4SUFXQ.mjs → chunk-NQBTLMSG.mjs} +15 -12
- package/testeranto/bundles/node/allTests/{chunk-UED26IMH.mjs → chunk-RF3LIUSG.mjs} +196 -233
- package/testeranto/bundles/node/allTests/{chunk-KYSOR62N.mjs → chunk-YZWFKYY3.mjs} +6 -2
- package/testeranto/bundles/node/allTests/metafile.json +294 -4083
- package/testeranto/bundles/node/allTests/src/lib/{BaseSuite.test.mjs → BaseSuite.test/node.test.mjs} +9 -7
- package/testeranto/bundles/node/allTests/src/lib/baseBuilder.test/{baseBuilder.test.mjs → baseBuilder.test.node.mjs} +8 -8
- package/testeranto/bundles/node/allTests/src/lib/classBuilder.test/classBuilder.test.mjs +8 -6
- package/testeranto/bundles/node/allTests/src/lib/core.test/core.test.mjs +2 -2
- package/testeranto/bundles/node/allTests/src/lib/pmProxy.test/index.mjs +114 -6
- package/testeranto/bundles/{node/allTests/chunk-2FXOXAKZ.mjs → pure/allTests/chunk-W22WOQNK.mjs} +377 -256
- package/testeranto/bundles/pure/allTests/metafile.json +732 -3
- package/testeranto/bundles/{node → pure}/allTests/src/Pure.test.mjs +113 -5
- package/testeranto/bundles/pure/allTests/src/lib/BaseSuite.test/pure.test.mjs +323 -0
- package/testeranto/bundles/pure/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs +224 -0
- package/testeranto/bundles/{node/allTests/chunk-DWKHII32.mjs → web/allTests/chunk-FIZ3WLUB.mjs} +439 -296
- package/testeranto/bundles/web/allTests/metafile.json +1133 -2
- package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test.html +19 -0
- package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test.mjs +322 -0
- package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.html +19 -0
- package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs +10964 -0
- package/testeranto/index.html +1 -1
- package/testeranto/reports/allTests/config.json +25 -25
- package/testeranto/reports/allTests/index.html +1 -1
- package/testeranto/reports/allTests/src/{PM/__tests__/webSidecar.testeranto/node → Pure.test/pure}/index.html +1 -1
- package/testeranto/reports/allTests/src/Pure.test/pure/lint_errors.json +1539 -0
- package/testeranto/reports/allTests/src/Pure.test/pure/logs.txt +11 -0
- package/testeranto/reports/allTests/src/Pure.test/pure/message +1 -0
- package/testeranto/reports/allTests/src/Pure.test/pure/prompt.txt +8 -0
- package/testeranto/reports/allTests/src/Pure.test/{node → pure}/type_errors.txt +15 -5
- package/testeranto/reports/allTests/src/{Pure.test → lib/BaseSuite.test/node.test}/node/index.html +1 -1
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/lint_errors.json +620 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/logs.txt +12 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/message +1 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/prompt.txt +8 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/type_errors.txt +94 -0
- package/testeranto/reports/allTests/src/{PM/__tests__/nodeSidecar.testeranto/node → lib/BaseSuite.test/pure.test/pure}/index.html +1 -1
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/lint_errors.json +620 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/logs.txt +11 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/message +1 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +8 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +104 -0
- package/testeranto/reports/allTests/src/{PM/__tests__/pureSidecar.testeranto/node → lib/BaseSuite.test/web.test/web}/index.html +1 -1
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/{node → web.test/web}/lint_errors.json +119 -107
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/logs.txt +10 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/message +1 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/prompt.txt +8 -0
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/type_errors.txt +95 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/index.html +21 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/lint_errors.json +966 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/message +1 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/prompt.txt +11 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/{baseBuilder.test → baseBuilder.test.node}/node/type_errors.txt +22 -17
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/bdd_errors.txt +1 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/index.html +21 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/lint_errors.json +966 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/message +1 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/prompt.txt +11 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/tests.json +57 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +57 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/bdd_errors.txt +1 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/index.html +21 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/{baseBuilder.test/node → baseBuilder.test.web/web}/lint_errors.json +61 -61
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/message +1 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/{baseBuilder.test/node → baseBuilder.test.web/web}/prompt.txt +6 -6
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/tests.json +57 -0
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/type_errors.txt +48 -0
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/index.html +1 -1
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/lint_errors.json +106 -86
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/logs.txt +12 -0
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/message +1 -1
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/prompt.txt +2 -2
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/type_errors.txt +26 -38
- package/testeranto/reports/allTests/src/lib/core.test/core.test/node/index.html +1 -1
- package/testeranto/reports/allTests/src/lib/core.test/core.test/node/{console_log.txt → logs.txt} +8 -8
- package/testeranto/reports/allTests/src/lib/core.test/core.test/node/message +1 -1
- package/testeranto/reports/allTests/src/lib/core.test/core.test/node/prompt.txt +1 -1
- package/testeranto/reports/allTests/src/lib/core.test/core.test/node/type_errors.txt +12 -1
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/index.html +1 -1
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/lint_errors.json +1413 -8
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/logs.txt +30 -0
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/message +1 -1
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/prompt.txt +2 -1
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/type_errors.txt +5 -5
- package/testeranto/reports/allTests/summary.json +48 -83
- package/testeranto.config.ts +32 -24
- package/tsc.log +273 -27
- package/.aider.tags.cache.v3/cache.db-shm +0 -0
- package/.aider.tags.cache.v3/cache.db-wal +0 -0
- package/testeranto/bundles/node/allTests/chunk-4PJCC2XT.mjs +0 -1039
- package/testeranto/bundles/node/allTests/chunk-5MQGD4WC.mjs +0 -251
- package/testeranto/bundles/node/allTests/chunk-6CGAD2FD.mjs +0 -800
- package/testeranto/bundles/node/allTests/chunk-PG6KUKNP.mjs +0 -44
- package/testeranto/bundles/node/allTests/chunk-PRPFVO6G.mjs +0 -251
- package/testeranto/bundles/node/allTests/chunk-VAAIAWXC.mjs +0 -117
- package/testeranto/bundles/node/allTests/chunk-W44DUDBK.mjs +0 -251
- package/testeranto/bundles/node/allTests/chunk-YI3EGRMQ.mjs +0 -167
- package/testeranto/bundles/node/allTests/src/PM/__tests__/nodeSidecar.testeranto.mjs +0 -188
- package/testeranto/bundles/node/allTests/src/PM/__tests__/pureSidecar.testeranto.mjs +0 -157
- package/testeranto/bundles/node/allTests/src/PM/__tests__/webSidecar.testeranto.mjs +0 -157
- package/testeranto/bundles/node/allTests/src/mothership/test.mjs +0 -24413
- package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/lint_errors.json +0 -80
- package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/message +0 -1
- package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/prompt.txt +0 -8
- package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/type_errors.txt +0 -28
- package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/lint_errors.json +0 -80
- package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/message +0 -1
- package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/prompt.txt +0 -8
- package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/type_errors.txt +0 -32
- package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/lint_errors.json +0 -80
- package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/message +0 -1
- package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/prompt.txt +0 -8
- package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/type_errors.txt +0 -32
- package/testeranto/reports/allTests/src/Pure.test/node/console_log.txt +0 -17
- package/testeranto/reports/allTests/src/Pure.test/node/lint_errors.json +0 -134
- package/testeranto/reports/allTests/src/Pure.test/node/message +0 -1
- package/testeranto/reports/allTests/src/Pure.test/node/prompt.txt +0 -7
- package/testeranto/reports/allTests/src/lib/BaseGiven.test/node/index.html +0 -21
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/console_log.txt +0 -35
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/index.html +0 -21
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/message +0 -1
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/prompt.txt +0 -7
- package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/type_errors.txt +0 -93
- package/testeranto/reports/allTests/src/lib/BaseThen.test/node/index.html +0 -21
- package/testeranto/reports/allTests/src/lib/BaseWhen.test/node/dev.html +0 -21
- package/testeranto/reports/allTests/src/lib/BaseWhen.test/node/index.html +0 -21
- package/testeranto/reports/allTests/src/lib/abstractBase/index/node/dev.html +0 -21
- package/testeranto/reports/allTests/src/lib/abstractBase/index/node/index.html +0 -21
- package/testeranto/reports/allTests/src/lib/baseBuilder/baseBuilder.test/node/dev.html +0 -21
- package/testeranto/reports/allTests/src/lib/baseBuilder/baseBuilder.test/node/index.html +0 -21
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test/node/console_log.txt +0 -12
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test/node/dev.html +0 -21
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test/node/index.html +0 -21
- package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test/node/message +0 -1
- package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/console_log.txt +0 -17
- package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/console_log.txt +0 -43
- package/testeranto/reports/allTests/src/mothership/test/node/console_log.txt +0 -44
- package/testeranto/reports/allTests/src/mothership/test/node/dev.html +0 -21
- package/testeranto/reports/allTests/src/mothership/test/node/index.html +0 -21
- package/testeranto/reports/allTests/src/mothership/test/node/lint_errors.json +0 -1
- package/testeranto/reports/allTests/src/mothership/test/node/message +0 -1
- package/testeranto/reports/allTests/src/mothership/test/node/prompt.txt +0 -8
- package/testeranto/reports/allTests/src/mothership/test/node/type_errors.txt +0 -24
- package/testeranto/reportsnode_build_errors +0 -12
- /package/testeranto/reports/allTests/src/{PM/__tests__/nodeSidecar.testeranto/node → Pure.test/pure}/dev.html +0 -0
- /package/testeranto/reports/allTests/src/{PM/__tests__/pureSidecar.testeranto → lib/BaseSuite.test/node.test}/node/dev.html +0 -0
- /package/testeranto/reports/allTests/src/{PM/__tests__/webSidecar.testeranto/node → lib/BaseSuite.test/pure.test/pure}/dev.html +0 -0
- /package/testeranto/reports/allTests/src/{Pure.test/node → lib/BaseSuite.test/web.test/web}/dev.html +0 -0
- /package/testeranto/reports/allTests/src/lib/{BaseGiven.test → baseBuilder.test/baseBuilder.test.node}/node/dev.html +0 -0
- /package/testeranto/reports/allTests/src/{PM/__tests__/nodeSidecar.testeranto/node/console_log.txt → lib/baseBuilder.test/baseBuilder.test.node/node/logs.txt} +0 -0
- /package/testeranto/reports/allTests/src/lib/{BaseSuite.test/node → baseBuilder.test/baseBuilder.test.pure/pure}/dev.html +0 -0
- /package/testeranto/reports/allTests/src/{PM/__tests__/nodeSidecar.testeranto/node → lib/baseBuilder.test/baseBuilder.test.pure/pure}/log.txt +0 -0
- /package/testeranto/reports/allTests/src/lib/{BaseThen.test/node → baseBuilder.test/baseBuilder.test.web/web}/dev.html +0 -0
- /package/testeranto/reports/allTests/src/lib/{BaseSuite.test/node → baseBuilder.test/baseBuilder.test.web/web}/log.txt +0 -0
- /package/testeranto/reports/allTests/src/{mothership/test/node/log.txt → lib/baseBuilder.test/baseBuilder.test.web/web/logs.txt} +0 -0
package/docs/index.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Testeranto docs and core concepts
|
|
2
2
|
|
|
3
|
-
Testeranto's type system provides a rigorous framework for Behavior-Driven Development (BDD) testing.
|
|
3
|
+
Testeranto's type system provides a rigorous framework for Behavior-Driven Development (BDD) testing. The API may seem complex but everything you need to know can be summed up in **1 function, 3 runtimes and 5 essential types, and 1 optional type**. Follow these patterns, and TypeScript's type checker will guide you through the rest.
|
|
4
4
|
|
|
5
5
|
### ⚠️ this doc is a work in progress. It is 99% accurate but needs some attention to be complete. ⚠️
|
|
6
6
|
|
|
@@ -26,7 +26,21 @@ class Rectangle {
|
|
|
26
26
|
}
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
### Testeranto's
|
|
29
|
+
### Testeranto's 1 function
|
|
30
|
+
|
|
31
|
+
Testeranto has 1 function. This function launches and runs the tests. It is here that all 5 types converge and if you can type this function call correctly, the TS type system should guide you through the rest.
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
async <I extends Ibdd_in_any, O extends Ibdd_out, M>(
|
|
35
|
+
input: I["iinput"],
|
|
36
|
+
testSpecification: ITestSpecification<I, O>,
|
|
37
|
+
testImplementation: ITestImplementation<I, O, M>,
|
|
38
|
+
testInterface: Partial<ITestInterface<I>>,
|
|
39
|
+
testResourceRequirement: ITTestResourceRequest = defaultTestResourceRequirement
|
|
40
|
+
): Promise<Testeranto<I, O, M>>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Testeranto's 3 runtimes
|
|
30
44
|
|
|
31
45
|
For each of testeranto's runtime, there is a specific Testeranto main function. Each is it's own import but all 3 are called in the same way.
|
|
32
46
|
|
|
@@ -36,6 +50,10 @@ For each of testeranto's runtime, there is a specific Testeranto main function.
|
|
|
36
50
|
import Testeranto from "testeranto/src/Node"; // <- import the Node main function
|
|
37
51
|
// below this point, all runtimes are identical!
|
|
38
52
|
|
|
53
|
+
import { implementation } from "./Rectangle.test.implementation";
|
|
54
|
+
import { specification } from "./Rectangle.test.specification";
|
|
55
|
+
import { interface } from "./Rectangle.test.interface";
|
|
56
|
+
|
|
39
57
|
// Note the type parameters I, O, and M: these will be important later
|
|
40
58
|
export default Testeranto<
|
|
41
59
|
I extends Ibdd_in,
|
|
@@ -95,32 +113,9 @@ export default Testeranto<
|
|
|
95
113
|
);
|
|
96
114
|
```
|
|
97
115
|
|
|
98
|
-
### Testeranto's 5
|
|
99
|
-
|
|
100
|
-
Every testeranto test is built around these 5 types that form a complete testing pipeline
|
|
101
|
-
|
|
102
|
-
1. **ITestSpecification** - The "what" of your tests (business requirements)
|
|
103
|
-
2. **ITestImplementation** - The "how" of your tests (concrete operations)
|
|
104
|
-
3. **ITestInterface** - The "glue" between specs and implementation
|
|
105
|
-
4. **Ibdd_in** - Defines the internal test flow shape
|
|
106
|
-
5. **Ibdd_out** - Defines the external test interface
|
|
107
|
-
|
|
108
|
-
```mermaid
|
|
109
|
-
flowchart LR
|
|
110
|
-
S[ITestSpecification] -->|defines| O[Ibdd_out]
|
|
111
|
-
I[ITestImplementation] -->|uses| O
|
|
112
|
-
I -->|uses| M[Modifier]
|
|
113
|
-
T[ITestInterface] -->|connects| N[Ibdd_in]
|
|
114
|
-
S -->|flows through| N
|
|
115
|
-
I -->|flows through| N
|
|
116
|
-
|
|
117
|
-
style S fill:#2aa198,stroke:#073642
|
|
118
|
-
style I fill:#859900,stroke:#073642
|
|
119
|
-
style T fill:#b58900,stroke:#073642
|
|
120
|
-
style O fill:#d33682,stroke:#073642
|
|
121
|
-
style N fill:#cb4b16,stroke:#073642
|
|
122
|
-
style M fill:#6c71c4,stroke:#073642
|
|
123
|
-
```
|
|
116
|
+
### Testeranto's 5 essential types
|
|
117
|
+
|
|
118
|
+
Every testeranto test is built around these 5 types that form a complete testing pipeline.
|
|
124
119
|
|
|
125
120
|
#### The Specification (ITestSpecification)
|
|
126
121
|
|
|
@@ -130,7 +125,6 @@ The Specification defines the business requirements in plain language, completel
|
|
|
130
125
|
- Human-readable test descriptions
|
|
131
126
|
- Defines test suites, scenarios (Given/When/Then)
|
|
132
127
|
- Maps directly to BDD concepts
|
|
133
|
-
- Uses Ibdd_out for type safety
|
|
134
128
|
|
|
135
129
|
```typescript
|
|
136
130
|
import {
|
|
@@ -243,10 +237,9 @@ export const implementation: ITestImplementation<
|
|
|
243
237
|
|
|
244
238
|
#### The Interface aka ITestInterface
|
|
245
239
|
|
|
246
|
-
The test interface is code which is NOT
|
|
240
|
+
The test interface is code which is NOT business logic. The interface adapts your test subject so that the BDD hooks can be applied. The interface implements the traditional BDD steps "before all", "after all", "before each", "after each", etc
|
|
247
241
|
|
|
248
242
|
```ts
|
|
249
|
-
|
|
250
243
|
import {
|
|
251
244
|
Ibdd_in,
|
|
252
245
|
ITestInterface,
|
|
@@ -275,7 +268,7 @@ export const testInterface: ITestInterface<
|
|
|
275
268
|
|
|
276
269
|
#### type I aka Ibdd_in
|
|
277
270
|
|
|
278
|
-
|
|
271
|
+
This type describes the "inner" shape of your BDD tests. Over the course of the execution of the test, the subject will change shapes- this test describe those changes.
|
|
279
272
|
|
|
280
273
|
```ts
|
|
281
274
|
import { Ibdd_in } from "testeranto/src/CoreTypes";
|
|
@@ -294,7 +287,7 @@ export type I = Ibdd_in<
|
|
|
294
287
|
|
|
295
288
|
#### type O aka Ibdd_out
|
|
296
289
|
|
|
297
|
-
|
|
290
|
+
This type describes the "outer" shape of your BDD tests. This type describes the set of legal BDD clauses.
|
|
298
291
|
|
|
299
292
|
```ts
|
|
300
293
|
import { Ibdd_out } from "testeranto/src/CoreTypes";
|
|
@@ -335,6 +328,8 @@ export type O = Ibdd_out<
|
|
|
335
328
|
>;
|
|
336
329
|
```
|
|
337
330
|
|
|
331
|
+
### Testeranto's 1 optional type
|
|
332
|
+
|
|
338
333
|
#### type M (optional)
|
|
339
334
|
|
|
340
335
|
this type describes the modifications to the shape of the "specification". It can be used to make your BDD tests DRYer but is not necessary
|
|
@@ -565,3 +560,20 @@ export default Testeranto<
|
|
|
565
560
|
|
|
566
561
|
|
|
567
562
|
```
|
|
563
|
+
|
|
564
|
+
## Trouble shooting
|
|
565
|
+
|
|
566
|
+
### Double check your runtimes.
|
|
567
|
+
|
|
568
|
+
Every test has a runtime, which must defined in 2 places. Both must match.
|
|
569
|
+
|
|
570
|
+
1. The import of the runtime
|
|
571
|
+
2. The runtime defined alongside the test in testeranto.config.ts
|
|
572
|
+
|
|
573
|
+
By convention, test filenames reveal their runtime. Ex: `__tests__/yourClass.node.test`. This is ONLY a convention. It has no real bearing on the runtime.
|
|
574
|
+
|
|
575
|
+
## Dos and Don'ts
|
|
576
|
+
|
|
577
|
+
### Do pass your test subject to the main testeranto function.
|
|
578
|
+
|
|
579
|
+
### Don't import your test subject elsewhere in your tests.
|
package/package.json
CHANGED
package/src/Node.ts
CHANGED
|
@@ -16,6 +16,8 @@ import {
|
|
|
16
16
|
|
|
17
17
|
let ipcfile;
|
|
18
18
|
|
|
19
|
+
console.log("mark4");
|
|
20
|
+
|
|
19
21
|
export class NodeTesteranto<
|
|
20
22
|
I extends Ibdd_in_any,
|
|
21
23
|
O extends Ibdd_out_any,
|
|
@@ -41,6 +43,7 @@ export class NodeTesteranto<
|
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
async receiveTestResourceConfig(partialTestResource: string) {
|
|
46
|
+
console.log("receiveTestResourceConfig", partialTestResource);
|
|
44
47
|
const t: ITTestResourceConfiguration = JSON.parse(partialTestResource);
|
|
45
48
|
const pm = new PM_Node(t, ipcfile);
|
|
46
49
|
return await this.testJobs[0].receiveTestResourceConfig(pm);
|
|
@@ -58,21 +61,22 @@ const testeranto = async <I extends Ibdd_in_any, O extends Ibdd_out, M>(
|
|
|
58
61
|
testInterface: Partial<INodeTestInterface<I>>,
|
|
59
62
|
testResourceRequirement: ITTestResourceRequest = defaultTestResourceRequirement
|
|
60
63
|
): Promise<Testeranto<I, O, M>> => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
try {
|
|
65
|
+
const t = new NodeTesteranto<I, O, M>(
|
|
66
|
+
input,
|
|
67
|
+
testSpecification,
|
|
68
|
+
testImplementation,
|
|
69
|
+
testResourceRequirement,
|
|
70
|
+
testInterface
|
|
71
|
+
);
|
|
72
|
+
console.log("args", process.argv);
|
|
68
73
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
process.on("unhandledRejection", (reason, promise) => {
|
|
75
|
+
console.error("Unhandled Rejection at:", promise, "reason:", reason);
|
|
76
|
+
// Optionally, terminate the process or perform cleanup
|
|
77
|
+
// t.registerUncaughtPromise(reason, promise);
|
|
78
|
+
});
|
|
74
79
|
|
|
75
|
-
try {
|
|
76
80
|
ipcfile = process.argv[3];
|
|
77
81
|
const f = await t.receiveTestResourceConfig(process.argv[2]);
|
|
78
82
|
|
|
@@ -51,7 +51,15 @@ export abstract class PM_WithEslintAndTsc extends PM_Base {
|
|
|
51
51
|
addableFiles: string[];
|
|
52
52
|
}) => {
|
|
53
53
|
console.log(ansiC.green(ansiC.inverse(`tsc < ${entrypoint}`)));
|
|
54
|
-
|
|
54
|
+
try {
|
|
55
|
+
this.typeCheckIsRunning(entrypoint);
|
|
56
|
+
} catch (e) {
|
|
57
|
+
console.error("error in tscCheck");
|
|
58
|
+
console.error(e);
|
|
59
|
+
console.error(entrypoint);
|
|
60
|
+
console.error(JSON.stringify(this.summary, null, 2));
|
|
61
|
+
process.exit(-1);
|
|
62
|
+
}
|
|
55
63
|
|
|
56
64
|
const program = tsc.createProgramFromConfig({
|
|
57
65
|
basePath: process.cwd(), // always required, used for relative paths
|
|
@@ -94,7 +102,6 @@ export abstract class PM_WithEslintAndTsc extends PM_Base {
|
|
|
94
102
|
});
|
|
95
103
|
|
|
96
104
|
fs.writeFileSync(tscPath, results.join("\n"));
|
|
97
|
-
|
|
98
105
|
this.typeCheckIsNowDone(entrypoint, results.length);
|
|
99
106
|
};
|
|
100
107
|
|
|
@@ -104,7 +111,16 @@ export abstract class PM_WithEslintAndTsc extends PM_Base {
|
|
|
104
111
|
addableFiles: string[]
|
|
105
112
|
) => {
|
|
106
113
|
console.log(ansiC.green(ansiC.inverse(`eslint < ${entrypoint}`)));
|
|
107
|
-
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
this.lintIsRunning(entrypoint);
|
|
117
|
+
} catch (e) {
|
|
118
|
+
console.error("error in eslintCheck");
|
|
119
|
+
console.error(e);
|
|
120
|
+
console.error(entrypoint);
|
|
121
|
+
console.error(JSON.stringify(this.summary, null, 2));
|
|
122
|
+
process.exit(-1);
|
|
123
|
+
}
|
|
108
124
|
|
|
109
125
|
const results = (await eslint.lintFiles(addableFiles))
|
|
110
126
|
.filter((r) => r.messages.length)
|
|
@@ -155,7 +171,7 @@ export abstract class PM_WithEslintAndTsc extends PM_Base {
|
|
|
155
171
|
this.name,
|
|
156
172
|
entryPoint.split(".").slice(0, -1).join("."),
|
|
157
173
|
platform,
|
|
158
|
-
`
|
|
174
|
+
`logs.txt`
|
|
159
175
|
);
|
|
160
176
|
|
|
161
177
|
const lintPath = path.join(
|
|
@@ -220,55 +236,86 @@ ${addableFiles
|
|
|
220
236
|
private ensureSummaryEntry(src: string, isSidecar = false) {
|
|
221
237
|
if (!this.summary[src]) {
|
|
222
238
|
this.summary[src] = {
|
|
223
|
-
typeErrors:
|
|
224
|
-
staticErrors:
|
|
225
|
-
|
|
226
|
-
prompt:
|
|
227
|
-
failingFeatures: {}
|
|
239
|
+
typeErrors: undefined,
|
|
240
|
+
staticErrors: undefined,
|
|
241
|
+
runTimeErrors: undefined,
|
|
242
|
+
prompt: undefined,
|
|
243
|
+
failingFeatures: {},
|
|
228
244
|
};
|
|
229
245
|
if (isSidecar) {
|
|
230
246
|
// Sidecars don't need all fields
|
|
231
|
-
delete this.summary[src].runTimeError;
|
|
232
|
-
delete this.summary[src].prompt;
|
|
247
|
+
// delete this.summary[src].runTimeError;
|
|
248
|
+
// delete this.summary[src].prompt;
|
|
233
249
|
}
|
|
234
250
|
}
|
|
235
251
|
return this.summary[src];
|
|
236
252
|
}
|
|
237
253
|
|
|
238
254
|
typeCheckIsRunning = (src: string) => {
|
|
239
|
-
|
|
240
|
-
|
|
255
|
+
if (!this.summary[src]) {
|
|
256
|
+
throw `this.summary[${src}] is undefined`;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
this.summary[src].typeErrors = "?";
|
|
241
260
|
};
|
|
242
261
|
|
|
243
262
|
typeCheckIsNowDone = (src: string, failures: number) => {
|
|
244
|
-
|
|
245
|
-
|
|
263
|
+
if (!this.summary[src]) {
|
|
264
|
+
throw `this.summary[${src}] is undefined`;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
if (failures === 0) {
|
|
268
|
+
console.log(ansiC.green(ansiC.inverse(`tsc > ${src}`)));
|
|
269
|
+
} else {
|
|
270
|
+
console.log(
|
|
271
|
+
ansiC.red(ansiC.inverse(`tsc > ${src} failed ${failures} times`))
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
this.summary[src].typeErrors = failures;
|
|
246
276
|
this.writeBigBoard();
|
|
247
277
|
this.checkForShutdown();
|
|
248
278
|
};
|
|
249
279
|
|
|
250
280
|
lintIsRunning = (src: string) => {
|
|
251
|
-
|
|
252
|
-
|
|
281
|
+
if (!this.summary[src]) {
|
|
282
|
+
throw `this.summary[${src}] is undefined`;
|
|
283
|
+
}
|
|
284
|
+
this.summary[src].staticErrors = "?";
|
|
253
285
|
this.writeBigBoard();
|
|
254
286
|
};
|
|
255
287
|
|
|
256
288
|
lintIsNowDone = (src: string, failures: number) => {
|
|
257
|
-
|
|
258
|
-
|
|
289
|
+
if (!this.summary[src]) {
|
|
290
|
+
throw `this.summary[${src}] is undefined`;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
if (failures === 0) {
|
|
294
|
+
console.log(ansiC.green(ansiC.inverse(`eslint > ${src}`)));
|
|
295
|
+
} else {
|
|
296
|
+
console.log(
|
|
297
|
+
ansiC.red(ansiC.inverse(`eslint > ${src} failed ${failures} times`))
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
this.summary[src].staticErrors = failures;
|
|
259
302
|
this.writeBigBoard();
|
|
260
303
|
this.checkForShutdown();
|
|
261
304
|
};
|
|
262
305
|
|
|
263
306
|
bddTestIsRunning = (src: string) => {
|
|
264
|
-
|
|
265
|
-
|
|
307
|
+
if (!this.summary[src]) {
|
|
308
|
+
throw `this.summary[${src}] is undefined`;
|
|
309
|
+
}
|
|
310
|
+
this.summary[src].runTimeErrors = "?";
|
|
266
311
|
this.writeBigBoard();
|
|
267
312
|
};
|
|
268
313
|
|
|
269
314
|
bddTestIsNowDone = (src: string, failures: number) => {
|
|
270
|
-
|
|
271
|
-
|
|
315
|
+
if (!this.summary[src]) {
|
|
316
|
+
throw `this.summary[${src}] is undefined`;
|
|
317
|
+
}
|
|
318
|
+
this.summary[src].runTimeErrors = failures;
|
|
272
319
|
this.writeBigBoard();
|
|
273
320
|
this.checkForShutdown();
|
|
274
321
|
};
|
|
@@ -280,50 +327,5 @@ ${addableFiles
|
|
|
280
327
|
);
|
|
281
328
|
};
|
|
282
329
|
|
|
283
|
-
checkForShutdown
|
|
284
|
-
console.log(ansiC.inverse(`checkForShutdown`));
|
|
285
|
-
|
|
286
|
-
this.writeBigBoard();
|
|
287
|
-
|
|
288
|
-
if (this.mode === "dev") return;
|
|
289
|
-
|
|
290
|
-
let inflight = false;
|
|
291
|
-
|
|
292
|
-
Object.keys(this.summary).forEach((k) => {
|
|
293
|
-
if (this.summary[k].prompt === "?") {
|
|
294
|
-
console.log(ansiC.blue(ansiC.inverse(`🕕 prompt ${k}`)));
|
|
295
|
-
inflight = true;
|
|
296
|
-
}
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
Object.keys(this.summary).forEach((k) => {
|
|
300
|
-
if (this.summary[k].runTimeError === "?") {
|
|
301
|
-
console.log(ansiC.blue(ansiC.inverse(`🕕 runTimeError ${k}`)));
|
|
302
|
-
inflight = true;
|
|
303
|
-
}
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
Object.keys(this.summary).forEach((k) => {
|
|
307
|
-
if (this.summary[k].staticErrors === "?") {
|
|
308
|
-
console.log(ansiC.blue(ansiC.inverse(`🕕 staticErrors ${k}`)));
|
|
309
|
-
inflight = true;
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
Object.keys(this.summary).forEach((k) => {
|
|
314
|
-
if (this.summary[k].typeErrors === "?") {
|
|
315
|
-
console.log(ansiC.blue(ansiC.inverse(`🕕 typeErrors ${k}`)));
|
|
316
|
-
inflight = true;
|
|
317
|
-
}
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
this.writeBigBoard();
|
|
321
|
-
|
|
322
|
-
if (!inflight) {
|
|
323
|
-
this.browser.disconnect().then(() => {
|
|
324
|
-
console.log(ansiC.inverse(`${this.name} has been tested. Goodbye.`));
|
|
325
|
-
process.exit();
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
};
|
|
330
|
+
abstract checkForShutdown();
|
|
329
331
|
}
|