deno/tests/specs
David Sherret c678550a17
BREAKING: remove "emit" and "map" from deno info output (#25468)
The map field has been empty for years now and we don't want the emit
file to be exposed so it allows us to iterate on making the cache
faster. Additionally, it's racy/unreliable to rely on this information.
Instead, people should emit the TS files themselves using tools like
deno_emit, typescript, esbuild, etc.

Closes https://github.com/denoland/deno/issues/17703
2024-09-05 14:22:13 +00:00
..
add feat(add): strip package subpath when adding a package (#25419) 2024-09-04 12:55:30 +00:00
bench feat: include version number in all --json based outputs (#25335) 2024-09-05 08:51:40 +00:00
bundle/removed
cache fix: update hint for deno add <package> (#25455) 2024-09-05 11:08:22 +02:00
cert
check fix: update hint for deno add <package> (#25455) 2024-09-05 11:08:22 +02:00
clean/general
cli/help_and_version_broken_pipe
compile feat(check): turn on useUnknownInCatchVariables (#25465) 2024-09-05 15:22:31 +02:00
coverage
doc feat: include version number in all --json based outputs (#25335) 2024-09-05 08:51:40 +00:00
eval chore: deprecate eval itests (#25382) 2024-09-03 15:14:19 +00:00
flags
fmt
future BREAKING(fs): remove Deno.funlock[Sync]() (#25442) 2024-09-05 11:23:37 +00:00
import_map/import_map_config
info BREAKING: remove "emit" and "map" from deno info output (#25468) 2024-09-05 14:22:13 +00:00
init/lib
install feat(install): deno install with entrypoint (#25411) 2024-09-04 13:06:16 -07:00
jsr
jupyter/install_command
lint feat(cli): give access to process global everywhere (#25291) 2024-09-04 11:04:06 +02:00
lockfile
node
npm fix: lock down allow-run permissions more (#25370) 2024-09-04 14:51:24 +02:00
permission fix(regression): do not expose resolved path in Deno.Command permission denied error (#25434) 2024-09-04 22:57:49 +00:00
publish
remove/basic
run fix: add suggestion how to fix importing CJS module (#21764) 2024-09-05 12:49:07 +00:00
serve
task
test refactor(cli/js): align error messages (#25406) 2024-09-04 09:19:55 +02:00
vendor/removed
workspaces fix(byonm): resolve npm deps of jsr deps (#25399) 2024-09-04 14:00:44 +00:00
mod.rs
README.md
schema.json

specs

These are integration tests that execute the deno binary. They supersede the itest macro found in the tests/integration folder and are the preferred way of writing tests that use the deno binary.

Structure

Tests must have the following directory structure:

tests/specs/<category_name>/<test_name>/__test__.json

Test filtering

To run a specific test, run:

cargo test specs::category_name::test_name

Or just the following, though it might run other tests:

cargo test test_name

To run showing the output of every test use -- --nocapture (note: this will cause tests to run sequentially instead of in parallel):

cargo test test_name -- --nocapture

__test__.json file

This file describes the test(s) to execute and the steps to execute. A basic example looks like:

{
  "args": "run main.js",
  "output": "main.out"
}

This will run deno run main.js then assert that the output matches the text in main.out.

Or another example that runs multiple steps:

{
  "tempDir": true,
  "steps": [{
    "args": "cache main.ts",
    "output": "cache.out"
  }, {
    "args": "run main.ts",
    "output": "error.out",
    "exitCode": 1
  }]
}

Or if you want to run several tests at the same time:

{
  "tests": {
    "ignore_dir": {
      "args": "run script.ts",
      "output": "script.out"
    },
    "some_other_test": {
      "args": "run other.ts",
      "output": "other.out"
    }
  }
}

Top level properties

  • repeat (number) - Number of times to repeat a test.
  • tempDir (boolean) - Copy all the non-test files to a temporary directory and execute the command in that temporary directory.
    • By default, tests are executed with a current working directory of the test, but this may not be desirable for tests such as ones that create a node_modules directory.

Step properties

When writing a single step, these may be at the top level rather than nested in a "steps" array or "tests" object.

  • args - A string (that will be spilt on whitespace into an args array) or an array of arguments.
  • output - Path to use to assert the output or text (must end with an .out extension) or text to pattern match against the output.
  • flaky - Step should be repeated until success a maximum of 3 times.
  • if ("windows", "linux", "mac", "unix") - Whether to run this step.
  • exitCode (number) - Expected exit code.

Auto-complete

To get auto-complete for these files, add the following to a local .vscode/settings.json file:

{
  "json.schemas": [{
    "fileMatch": [
      "__test__.jsonc"
    ],
    "url": "./tests/specs/schema.json"
  }]
}

.out files

.out files are used to assert the output when running a test or test step.

Within the file, you can use the following for matching:

  • [WILDCARD] - match any text at the wildcard
  • [WILDLINE] - match any text on the current line
  • [WILDCHAR] - match the next character
  • [WILDCHARS(5)] - match any of the next 5 characters
  • [UNORDERED_START] followed by many lines then [UNORDERED_END] will match the lines in any order (useful for non-deterministic output)
  • [# example] - line comments start with [# and end with ]