Add easy suite testing
parent
7a8a4ad629
commit
247bd26c8b
15
README.md
15
README.md
|
@ -54,3 +54,18 @@ suite.js
|
||||||
const { test } = await import("test.js");
|
const { test } = await import("test.js");
|
||||||
await test.run(consolereporter());
|
await test.run(consolereporter());
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Hot to easily run a suite of multiple test
|
||||||
|
|
||||||
|
test.js
|
||||||
|
|
||||||
|
```js
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
suite.js
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { suite } from "metaltest";
|
||||||
|
await suite(); // Will run all test that are in the current folder recursively
|
||||||
|
```
|
||||||
|
|
3
index.js
3
index.js
|
@ -3,6 +3,7 @@ import { consolereporter } from './consolereporter.js'
|
||||||
import { linereporter } from './linereporter.js'
|
import { linereporter } from './linereporter.js'
|
||||||
import { totalreporter } from './totalreporter.js'
|
import { totalreporter } from './totalreporter.js'
|
||||||
import { runifmain } from './runifmain.js'
|
import { runifmain } from './runifmain.js'
|
||||||
|
import { suite } from './suite.js'
|
||||||
|
|
||||||
const noreporter = {
|
const noreporter = {
|
||||||
start: (title) => { },
|
start: (title) => { },
|
||||||
|
@ -67,5 +68,5 @@ const metaltest = (title) => {
|
||||||
return runner
|
return runner
|
||||||
}
|
}
|
||||||
|
|
||||||
export { metaltest, consolereporter, linereporter, totalreporter, runifmain }
|
export { metaltest, consolereporter, linereporter, totalreporter, runifmain, suite }
|
||||||
export default metaltest
|
export default metaltest
|
|
@ -0,0 +1,49 @@
|
||||||
|
import { readdir } from 'node:fs/promises'
|
||||||
|
import { join } from 'node:path'
|
||||||
|
const walkDir = async function* (dir) {
|
||||||
|
const files = await readdir(dir, { withFileTypes: true })
|
||||||
|
|
||||||
|
for (const file of files) {
|
||||||
|
if (file.isDirectory()) {
|
||||||
|
yield* walkDir(join(dir, file.name))
|
||||||
|
} else {
|
||||||
|
yield join(dir, file.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
import { dirname } from 'node:path'
|
||||||
|
const getStackAbsolutePaths = () => {
|
||||||
|
const old = Error.prepareStackTrace
|
||||||
|
Error.prepareStackTrace = (_, stack) => stack
|
||||||
|
const stack = new Error().stack
|
||||||
|
Error.prepareStackTrace = old
|
||||||
|
|
||||||
|
return stack
|
||||||
|
.map(cs => cs.getFileName())
|
||||||
|
.filter(filename => filename?.startsWith('file://'))
|
||||||
|
.map(filename => dirname(fileURLToPath(filename)))
|
||||||
|
}
|
||||||
|
|
||||||
|
import { consolereporter, totalreporter } from 'metaltest'
|
||||||
|
const suite = async (folder = '.') => {
|
||||||
|
const absolutePaths = getStackAbsolutePaths()
|
||||||
|
const absolutePath = absolutePaths[2]
|
||||||
|
|
||||||
|
const total = totalreporter()
|
||||||
|
|
||||||
|
for await (const file of walkDir(folder)) {
|
||||||
|
if (file.includes('node_modules')) continue
|
||||||
|
if (file.startsWith('.git')) continue
|
||||||
|
if (!file.endsWith('test.js')) continue
|
||||||
|
|
||||||
|
const module = join(absolutePath, file)
|
||||||
|
const { test } = await import(module)
|
||||||
|
await test.run(consolereporter(), total)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(total.msg())
|
||||||
|
}
|
||||||
|
|
||||||
|
export { suite }
|
Loading…
Reference in New Issue