Unit test your typescript architecture. Inspired by ArchUnit.
Explore all available methods on https://amaro0.github.io/ts-arch-unit/.
Should work with any test runner.
describe('example tests', () => {
it('command handlers should not depend on concrete classes', () => {
classes()
.that()
.haveMatchingName(/CommandHandler/)
.should()
.not()
.depend()
.onAnyConcreteImplementation();
});
it('services directory should have propely named files', () => {
files()
.that()
.resideInADirectory('services')
.should()
.haveMatchingName(/[A-Za-z]+Service.ts/);
});
it('controllers should not depend on repositories', () => {
files()
.that()
.resideInADirectory('controllers')
.should()
.not()
.dependOnFiles()
.that()
.resideInADirectory('repositories');
});
});
npm install --save-dev ts-arch-unit
To use ts-arch-unit you have to place .tsarchunitrc
config file in your project. Right now the
only option is root
describing folder of your ts source files
.tsarchunitrc
file{
"root": "src"
}
There are few general rules that might help you write powerful queries without issues:
classes()
or files()
..should()
. That
means you can write
classes().that().haveMatchingName(/CommandHandler/).and().resideInDirectory('core')
to select
classes that will be asserted and then by appending
.should().implementInterface('ICommand').and().haveMatchingMethod('handle')
..should()
there is no possibility for entering filter mode in the same query.
Write new query instead..not()
both in filter and assert mode. Negation is canceled
after one method. That means you can write queries like:classes().that().haveMatchingName(/Repository/).should().not().resideInADirectory('core');
classes().that().not().haveMatchingName(/Repository/).should().not().resideInADirectory('repositories');
.excludedByMatchingName
).That's all. The rest is your imagination and endless chaining of available methods :>
API is not stable and might be changed in future releases.
Generated using TypeDoc