1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-27 17:49:08 -05:00
denoland-deno/tests/specs
Nathan Whitaker 124b28ab63
fix(cli): set npm_config_user_agent when running npm packages or tasks (#26639)
Fixes #25342.

Still not sure on the exact user agent to set (should it include
`node`?).

After this PR, here's the state of running some `create-*` packages
(just ones I could think of off the top of my head):

| package                  | prints/runs/suggests deno install | notes |
| ---------------- | ------------- | ------ |
| `create-next-app` |  | falls back to npm, needs a PR
([code](c32e280209/packages/create-next-app/helpers/get-pkg-manager.ts (L3)))
| `sv create` |  | uses `package-manager-detector`, needs a PR
([code](https://github.com/antfu-collective/package-manager-detector/tree/main))
| `create-qwik` |  | runs `deno install` but suggests `deno start`
which doesn't work (should be `deno task start` or `deno run start`)
| `create-astro` |  | runs `deno install` but suggests `npm run dev`
later in output, probably needs a PR
| `nuxi init` |  | deno not an option in dialog, needs a PR
([code](f04e2e8944/src/commands/init.ts (L96-L102)))
| `create-react-app` |  | uses npm
| `ng new` (`@angular/cli`) |  | uses npm
| `create-vite` |  | suggests working deno commands 🎉 
| `create-solid` |   | suggests npm commands, needs PR

It's possible that fixing `package-manager-detector` or other packages
might make some of these just work, but haven't looked too carefully at
each
2024-11-06 00:36:24 +01:00
..
add fix(install): update lockfile when using package.json (#26458) 2024-10-25 02:09:35 +02:00
bench fix(npm): ensure scoped package name is encoded in URLs (#26390) 2024-10-25 02:09:32 +02:00
bundle/removed BREAKING: remove deno bundle (#25339) 2024-09-02 17:27:37 +02:00
cache fix(npm): ensure scoped package name is encoded in URLs (#26390) 2024-10-25 02:09:32 +02:00
cert feat: add --allow-import flag (#25469) 2024-09-26 01:50:54 +00:00
check fix(check): ignore resolving jsxImportSource when jsx is not used in graph (#26548) 2024-10-30 00:15:37 +01:00
clean/general feat(clean): add progress bar (#25026) 2024-08-14 13:04:07 +02:00
cli/help_and_version_broken_pipe fix: panic when piping "deno help" or "deno --version" (#22917) 2024-07-09 22:57:00 +00:00
compile fix(compile): regression handling redirects (#26586) 2024-10-30 00:16:12 +01:00
coverage fix(coverage): ignore urls from doc testing (#25736) 2024-09-20 15:04:22 +09:00
doc chore: remove unnecessary envs in spec tests (#25982) 2024-10-02 10:14:38 +01:00
eval chore: deprecate eval itests (#25382) 2024-09-03 15:14:19 +00:00
flags feat: add lowercase -v version flag (#23750) 2024-05-23 00:20:20 +00:00
fmt refactor(fmt): rewrite HTML syntax error handling (#25892) 2024-09-26 20:44:36 -04:00
future chore: cleanup remaining internals.future code (#25624) 2024-09-16 09:28:35 +10:00
import_map/import_map_config refactor: move importMap with imports/scopes diagnostic to deno_config (#24553) 2024-07-12 12:48:53 -04:00
info fix(info): resolve workspace member mappings (#26350) 2024-10-25 02:09:32 +02:00
init/lib fix(init): use bare specifier for jsr:@std/assert (#24581) 2024-07-14 13:22:43 -04:00
install fix: surface package.json location on dep parse failure (#26665) 2024-11-06 00:36:23 +01:00
jsr feat(lsp): quick fix for @deno-types="npm:@types/*" (#25954) 2024-10-01 22:55:02 +01:00
jupyter/install_command refactor(jupyter): use runtimelib for Jupyter structures and directory paths (#23826) 2024-05-21 22:35:21 +02:00
lint fix: provide hints in terminal errors for Node.js globals (#26610) 2024-10-30 00:16:12 +01:00
lockfile fix(check): support --frozen on deno check (#26479) 2024-10-25 02:09:36 +02:00
node fix(ext/node): resolve exports even if parent module filename isn't present (#26553) 2024-11-06 00:36:23 +01:00
npm fix(cli): set npm_config_user_agent when running npm packages or tasks (#26639) 2024-11-06 00:36:24 +01:00
permission fix(unstable/worker): ensure import permissions are passed (#26101) 2024-10-10 14:01:42 +01:00
publish fix(npm): ensure scoped package name is encoded in URLs (#26390) 2024-10-25 02:09:32 +02:00
remove fix(install): better json editing (#26450) 2024-10-25 02:09:34 +02:00
repl/console_log fix(console/ext/repl): support using parseFloat() (#25900) 2024-10-14 15:04:18 -07:00
run fix: surface package.json location on dep parse failure (#26665) 2024-11-06 00:36:23 +01:00
serve feat(serve): Support second parameter in deno serve (#25606) 2024-09-12 23:32:28 +00:00
task fix(npm): ensure scoped package name is encoded in URLs (#26390) 2024-10-25 02:09:32 +02:00
test fix(npm): ensure scoped package name is encoded in URLs (#26390) 2024-10-25 02:09:32 +02:00
upgrade tests: fix upgrade canary test (#25706) 2024-09-18 13:43:50 +00:00
vendor/removed BREAKING: remove deno vendor (#25343) 2024-09-03 17:00:57 +10:00
worker feat: add --allow-import flag (#25469) 2024-09-26 01:50:54 +00:00
workspaces fix: remove recently added deno.json node_modules aliasing (#25542) 2024-09-09 20:19:29 +00:00
mod.rs feat: default to TS for file extension and support ext flag in more scenarios (#25472) 2024-09-18 21:15:13 +02:00
README.md chore: support -- --nocapture in the spec tests (#24113) 2024-06-06 08:37:13 -04:00
schema.json test: add supporting for ignoring spec tests (#25242) 2024-08-28 00:19:29 +00: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 ]