1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 07:14:47 -05:00
denoland-deno/tests/specs
David Sherret 147411e64b
feat: npm workspace and better Deno workspace support (#24334)
Adds much better support for the unstable Deno workspaces as well as
support for npm workspaces. npm workspaces is still lacking in that we
only install packages into the root node_modules folder. We'll make it
smarter over time in order for it to figure out when to add node_modules
folders within packages.

This includes a breaking change in config file resolution where we stop
searching for config files on the first found package.json unless it's
in a workspace. For the previous behaviour, the root deno.json needs to
be updated to be a workspace by adding `"workspace":
["./path-to-pkg-json-folder-goes-here"]`. See details in
https://github.com/denoland/deno_config/pull/66

Closes #24340
Closes #24159
Closes #24161
Closes #22020
Closes #18546
Closes #16106
Closes #24160
2024-07-04 00:54:33 +00:00
..
bench feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
bundle/lockfile feat(vendor): support modifying remote files in vendor folder without checksum errors (#23979) 2024-05-28 14:58:43 -04:00
cache chore: fix flaky net_listen_allow_localhost_4555 (#23726) 2024-05-07 17:21:56 +00:00
cert chore: upgrade to reqwest 0.12.4 and rustls 0.22 (#24388) 2024-07-02 02:09:47 +02:00
check feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
compile feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
coverage fix(coverage): Error if no files are included in the report (#22952) 2024-03-15 20:58:57 -07:00
eval/env_unparsable_file fix: --env flag confusing message on syntax error (#23915) 2024-05-27 15:06:18 +02:00
flags feat: add lowercase -v version flag (#23750) 2024-05-23 00:20:20 +00:00
fmt feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
future FUTURE(ext/ffi,ext/webgpu): stabilize FFI and WebGPU APIs (#24011) 2024-05-28 11:37:43 +00:00
import_map/import_map_config chore(tests/specs): ability to have sub tests in file (#23667) 2024-05-03 10:19:42 +05:30
info refactor: move redirect handling into deno_graph (#23444) 2024-04-19 01:43:28 +00:00
install feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
jsr feat(vendor): support modifying remote files in vendor folder without checksum errors (#23979) 2024-05-28 14:58:43 -04:00
jupyter/install_command refactor(jupyter): use runtimelib for Jupyter structures and directory paths (#23826) 2024-05-21 22:35:21 +02:00
lint feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
lockfile feat(cli): Add --frozen flag to error out if lockfile is out of date (#24355) 2024-07-02 15:00:16 -07:00
node fix(ext/node): support stdin child_process IPC & fd stdout/stderr (#24106) 2024-06-07 22:51:32 +05:30
npm feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
permission fix(runtime): Allow opening /dev/fd/XXX for unix (#23743) 2024-05-10 11:21:36 -06:00
publish feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
run feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
serve feat: Add deno serve subcommand (#23511) 2024-04-24 19:45:49 +00:00
task feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
test feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
workspaces feat: npm workspace and better Deno workspace support (#24334) 2024-07-04 00:54:33 +00:00
mod.rs chore: support -- --nocapture in the spec tests (#24113) 2024-06-06 08:37:13 -04:00
README.md chore: support -- --nocapture in the spec tests (#24113) 2024-06-06 08:37:13 -04:00
schema.json chore: support -- --nocapture in the spec tests (#24113) 2024-06-06 08:37:13 -04:00

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 ]