Skip to content

Commit b5b1ba3

Browse files
committed
Example showing discovery and running of test commands
1 parent 14cfddc commit b5b1ba3

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

book/testing.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,4 +165,63 @@ for t in [
165165
```
166166
and be invoked as `nu tests.nu`
167167

168+
### Basic Test Framework
169+
170+
It is also possible to define tests in Nushell as functions with descriptive names and discover
171+
them dynamically without requiring a [Nupm] package. The following uses `scope commands` and a
172+
second instance of Nushell to run the generated list of tests.
173+
174+
```nushell
175+
use std assert
176+
177+
source fib.nu
178+
179+
def main [] {
180+
print "Running tests..."
181+
182+
let test_commands = (
183+
scope commands
184+
# Exclude all in-built commands
185+
| where ($it.type == "custom")
186+
# Include all commands starting with "test_"
187+
| where ($it.name | str starts-with "test_")
188+
# Exclude commands marked as "ignored" in the description
189+
| where not ($it.description | str starts-with "ignore")
190+
# Get the name of the test command
191+
| get name
192+
# Prefix each test command with a command to print the test name
193+
| each { |test| [$"print 'Running test: ($test)'", $test] } | flatten
194+
# Concatenate into a command list
195+
| str join "; "
196+
)
197+
198+
nu --commands $"source ($env.CURRENT_FILE); ($tests)"
199+
print "Tests completed successfully"
200+
}
201+
202+
def test_fib [] {
203+
for t in [
204+
[input, expected];
205+
[0, 0],
206+
[1, 1],
207+
[2, 1],
208+
[3, 2],
209+
[4, 3],
210+
[5, 5],
211+
[6, 8],
212+
[7, 13]
213+
] {
214+
assert equal (fib $t.input) $t.expected
215+
}
216+
}
217+
218+
# ignore
219+
def test_fib_ignored_test [] {
220+
print "This test will not be executed"
221+
}
222+
```
223+
224+
This is a simple example but could be extended to include many of the things you might expect from
225+
a testing framework, including setup and tear down functions and test discovery across files.
226+
168227
[Nupm]: https://github.com/nushell/nupm

0 commit comments

Comments
 (0)