
Security News
Feross on TBPN: How North Korea Hijacked Axios
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.
metamatcher
Advanced tools
metamatcherMatchers for Jest checking TypeScript code properties via TypeScript and other matchers useful for using tests as a grading tool.
Install with npm:
npm install --save-dev metamatcher
You need to somehow run the metamatcher module in order to extend expect at runtime. This can be done by either importing the module in your tests (which you will do in order to use locator functions).
Adding the following line to your package config:
"jest": {
"setupFilesAfterEnv": ["metamatcher/setup"]
}
or the following one in your jest.config.js:
setupFilesAfterEnv: ["metamatcher/setup"]
does not work... what did I miss?
You need to initially load the program somehow. It is recommended to do this in the beforeAll function:
beforeAll(()=>{ loadProgram("src/file.ts") });
In a test you can then use queries for declarations and matchers, e.g.
expect(functionDeclaration("src/someFile.ts", "foo")).toBeRecursive();
The following locators, i.e. functions returning AST elements or other information, are provided:
The following matchers for syntax and convention checks are provided:
All these function take an optional argument with a message to be displayed in case of failure.
expect(functionDeclaration("tests/samples.ts", "funcWithRecursion")).toBeRecursive();
The following matchers are provided for use with custom messages:
toBe…WithMessage: Similar to toBe…, but with an optional parameter
which may be either a string (with a message) or a function producing an message.Additionally, function
The emitted messages are enclosed in §§§ by default. This allows for tools processing the test output to extract the messages.
The enclosing tags can be changed via METAMATCHER_MSG_PREFIX and METAMATCHER_MSG_POSTFIX environment variables.
Example:
expect(1).toBeWithMessage(2, (rec,exp) => `Expected ${rec} to be ${exp}`);
This will output a line like this:
§§§Expected 1 to be 2§§§
This allows other tools to extract exactly this message from the test output.
This differs from the solution for custom messages provided by (https://github.com/mattphillips/jest-expect-message)[jest-expect-message]: jest-expect-message can only print out (more or less) constant messages, but the message cannot contain the actual values of the test. This is not sufficient for grading purposes.
Note that toThrow does not work in the async case, since if the promise is rejected, the matcher is not called at all. That is
await expect(asyncCall()).rejects.toThrowWithMessage("message");
will not work. Instead, use
try {
await asyncCall();
throw new Error("My message");
} catch (e) {
// expected
}
in this special case.
If you want to add special messages, in particular for tools analyzing the output later on in your tool chain, you may want to use runWithFailMessage (or short rwfm).
This function encappsulates a call and replaces or modifies the thrown error message.
runWithFailMessage(()=>someFoo(), "Folgefehler");
This will emit §§§Folgefehler§§§ if someFoo() would throw an error.
You can also use a function to generate the message, e.g.
runWithFailMessage(()=>someFoo(), (errMsg) => "Folgefehler: " + errMsg);
This works also with async code:
async function bar(): Promise<string> {…}
const s: string = await rwfm(()=>bar(), (errMsg) => `Folgefehler: ${errMsg}`);
In order to test command line interfaces (CLIs), some utility functions are provided:
This library is developed on demand. It is not a fully-features code testing library but only contains matchers as far as needed by the author. It is basically made public in order to simplify the author's scripts.
This program and the accompanying materials are made available under the terms of the Eclipse Public License v. 2.0 which is available at https://www.eclipse.org/legal/epl-2.0.
FAQs
Matcher for Jest/Vitest TypeScript checking code properties (via TypeScript)
The npm package metamatcher receives a total of 43 weekly downloads. As such, metamatcher popularity was classified as not popular.
We found that metamatcher demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.

Security News
OpenSSF has issued a high-severity advisory warning open source developers of an active Slack-based campaign using impersonation to deliver malware.

Research
/Security News
Malicious packages published to npm, PyPI, Go Modules, crates.io, and Packagist impersonate developer tooling to fetch staged malware, steal credentials and wallets, and enable remote access.