DEPRECATED! Please look at marko-testing-library for testing marko code.
A utility that helps you test marko components within jest
framework.
Your project needs to have jest@^23
and marko@^4.13
(with marko-widgets@^7
, if legacy components support is needed) installed.
Within your regular jest config, you need to specify a transform for *.marko
files (Note: if your NODE_ENV is set to dev
or development
, you need to run jest with "cache": false
option):
...
"cache": false, // Only if your NODE_ENV is either `dev` or `development`.
"transform": {
...
"\\.marko$": "<rootDir>/node_modules/marko-tester/preprocessor.js"
}
You can also test projects with marko@^3.14
and marko-widgets@^6.6
. In this scenario always disable jest's cache.
You can set up tester
in the "global" section of jest's config:
"globals": {
...
"tester": {
"shallow": false
}
}
shallow
(default: true) - You can turn off shallow rendering by passingfalse
here. That way marko won't isolate any component test.
marko-tester
returns a function for you to use. Pass a relative path to a marko component file and you will receive a render
method and fixtures
method/object. By default this will run JEST SnapShots test for the fixtures of the component.
-
render
- a method that renders a component with a given input and mounts it todocument.body
. The mounted component instance is returned. -
fixtures
- an object that contains all fixtures that are found within the__snapshots__
folder for the component. You can get content of a fixture by specifying a filename:fixtures[FixtureFileName]
.
As a second argument you can pass options object:
-
withoutFixtures
(default: false) - set this to true if you don't want automatic snapshot test execution. At this pointfixtures
will become executable and you will be able to run snapshot test usingfixtures()
. You can run specific snapshot by providing a fixture namefixtures(FixtureFileName)
. -
withAwait
(default: false) - if your template has<await/>
tag in it, you need to set this to true. At this pointrender
will become an asynchronous function and you will need to treat it with await.
const { render, fixtures } = require('marko-tester')('../index.marko');
describe('When component is rendered without results', () => {
let component;
beforeEach(() => {
component = render(fixtures['without-results']);
});
afterEach(() => {
component.destroy();
});
...your assertions...
});
const { render, fixtures } = require('marko-tester')('../index.marko', { withoutFixtures: true });
fixtures();
describe('When component is rendered with records', () => {
let component;
beforeEach(() => {
component = render(fixtures.records);
});
afterEach(() => {
component.destroy();
});
...your assertions...
});
const { render, fixtures } = require('marko-tester')('../index.marko', { withAwait: true });
describe('When component is rendered without model', () => {
let component;
beforeEach(async () => {
component = await render(fixtures.empty);
});
afterEach(() => {
component.destroy();
});
...your assertions...
});
require('marko-tester')('../index.marko');
You can find more examples in the tests folder.
MIT