mirror of
https://github.com/kbwo/testing-language-server.git
synced 2025-07-16 16:05:01 +00:00
173 lines
4.6 KiB
JavaScript
173 lines
4.6 KiB
JavaScript
const test = require("node:test");
|
|
const { describe, it } = require("node:test");
|
|
const assert = require("node:assert");
|
|
const { throwError } = require("./util.js");
|
|
// # Basic example
|
|
test("synchronous passing test", (t) => {
|
|
// This test passes because it does not throw an exception.
|
|
assert.strictEqual(1, 1);
|
|
});
|
|
|
|
test("synchronous failing test", (t) => {
|
|
// This test fails because it throws an exception.
|
|
assert.strictEqual(1, 2);
|
|
});
|
|
|
|
test("asynchronous passing test", async (t) => {
|
|
// This test passes because the Promise returned by the async
|
|
// function is settled and not rejected.
|
|
assert.strictEqual(1, 1);
|
|
});
|
|
|
|
test("asynchronous failing test", async (t) => {
|
|
// This test fails because the Promise returned by the async
|
|
// function is rejected.
|
|
assert.strictEqual(1, 2);
|
|
});
|
|
|
|
test("failing test using Promises", (t) => {
|
|
// Promises can be used directly as well.
|
|
return new Promise((resolve, reject) => {
|
|
setImmediate(() => {
|
|
reject(new Error("this will cause the test to fail"));
|
|
});
|
|
});
|
|
});
|
|
|
|
test("callback passing test", (t, done) => {
|
|
// done() is the callback function. When the setImmediate() runs, it invokes
|
|
// done() with no arguments.
|
|
setImmediate(done);
|
|
});
|
|
|
|
test("callback failing test", (t, done) => {
|
|
// When the setImmediate() runs, done() is invoked with an Error object and
|
|
// the test fails.
|
|
setImmediate(() => {
|
|
done(new Error("callback failure"));
|
|
});
|
|
});
|
|
|
|
// # Subtests
|
|
test("top level test", async (t) => {
|
|
await t.test("subtest 1", (t) => {
|
|
assert.strictEqual(1, 1);
|
|
});
|
|
|
|
await t.test("subtest 2", (t) => {
|
|
assert.strictEqual(2, 2);
|
|
});
|
|
});
|
|
|
|
// # Skipping tests
|
|
// The skip option is used, but no message is provided.
|
|
test("skip option", { skip: true }, (t) => {
|
|
// This code is never executed.
|
|
});
|
|
|
|
// The skip option is used, and a message is provided.
|
|
test("skip option with message", { skip: "this is skipped" }, (t) => {
|
|
// This code is never executed.
|
|
});
|
|
|
|
test("skip() method", (t) => {
|
|
// Make sure to return here as well if the test contains additional logic.
|
|
t.skip();
|
|
});
|
|
|
|
test("skip() method with message", (t) => {
|
|
// Make sure to return here as well if the test contains additional logic.
|
|
t.skip("this is skipped");
|
|
});
|
|
|
|
// # TODO tests
|
|
// The todo option is used, but no message is provided.
|
|
test("todo option", { todo: true }, (t) => {
|
|
// This code is executed, but not treated as a failure.
|
|
throw new Error("this does not fail the test");
|
|
});
|
|
|
|
// The todo option is used, and a message is provided.
|
|
test("todo option with message", { todo: "this is a todo test" }, (t) => {
|
|
// This code is executed.
|
|
});
|
|
|
|
test("todo() method", (t) => {
|
|
t.todo();
|
|
});
|
|
|
|
test("todo() method with message", (t) => {
|
|
t.todo("this is a todo test and is not treated as a failure");
|
|
throw new Error("this does not fail the test");
|
|
});
|
|
|
|
// # describe() and it() aliases
|
|
describe("A thing", () => {
|
|
it("should work", () => {
|
|
assert.strictEqual(1, 1);
|
|
});
|
|
|
|
it("should be ok", () => {
|
|
assert.strictEqual(2, 2);
|
|
});
|
|
|
|
describe("a nested thing", () => {
|
|
it("should work", () => {
|
|
assert.strictEqual(3, 3);
|
|
});
|
|
});
|
|
});
|
|
|
|
// # only tests
|
|
// Assume Node.js is run with the --test-only command-line option.
|
|
// The suite's 'only' option is set, so these tests are run.
|
|
test("only: this test is run", { only: true }, async (t) => {
|
|
// Within this test, all subtests are run by default.
|
|
await t.test("running subtest");
|
|
|
|
// The test context can be updated to run subtests with the 'only' option.
|
|
t.runOnly(true);
|
|
await t.test("this subtest is now skipped");
|
|
await t.test("this subtest is run", { only: true });
|
|
|
|
// Switch the context back to execute all tests.
|
|
t.runOnly(false);
|
|
await t.test("this subtest is now run");
|
|
|
|
// Explicitly do not run these tests.
|
|
await t.test("skipped subtest 3", { only: false });
|
|
await t.test("skipped subtest 4", { skip: true });
|
|
});
|
|
|
|
// The 'only' option is not set, so this test is skipped.
|
|
test("only: this test is not run", () => {
|
|
// This code is not run.
|
|
throw new Error("fail");
|
|
});
|
|
|
|
describe("A suite", () => {
|
|
// The 'only' option is set, so this test is run.
|
|
it("this test is run A ", { only: true }, () => {
|
|
// This code is run.
|
|
});
|
|
|
|
it("this test is not run B", () => {
|
|
// This code is not run.
|
|
throw new Error("fail");
|
|
});
|
|
});
|
|
|
|
describe.only("B suite", () => {
|
|
// The 'only' option is set, so this test is run.
|
|
it("this test is run C", () => {
|
|
// This code is run.
|
|
});
|
|
|
|
it("this test is run D", () => {
|
|
// This code is run.
|
|
});
|
|
});
|
|
|
|
test("import from external file. this must be fail", () => {
|
|
throwError();
|
|
});
|