-
-
Notifications
You must be signed in to change notification settings - Fork 1
Features
Vitali Haradkou edited this page Oct 14, 2021
·
9 revisions
import { Runner, RunnerLike } from '@magiqan/runner';
class MyOwnRunner implements RunnerLike{
async run(){
console.log('custom runner');
}
// other implementation
}
const myRunner = new Runner.override(MyOwnRunner, /** MyOwnRunner constructor args */[]);
await myRunner.run(); // prints: custom runnerimport assert from 'assert'
@testable()
class MyTestClass{
@test()
method(){
assert.ok()
}
}import { Runner } from '@magiqan/runner';
import { JSONReporter } from '@magiqan/reporter';
const runner = new Runner(__dirname);
const reporter = new JSONReporter('./out.json');
runner.addFile('./testFile.ts');
await runner.run(); // run tests
reporter.generate();All events described here(insert link)
Custom events are also supportable
import {Event, events} from '@magiqan/events';
events.subscribe('runnerInit', (payload) => {
// do some with event data
})
events.subscribe('my event', (payload) => {
console.log(payload); // prints: {custom: 'payload'}
})
events.emit(new Event('my event', {custom: 'payload'}));// test.ts
import {testable, beforeAll, MetadataManager} from '@magiqan/core';
@testable
class A {
metadata = new MetadataManager(this);
@beforeAll()
beforeAll() {
this.metadata.defineMetadata('beforeAll', 'some key', 'some value')
console.log('before all');
}
@test()
someTest() {
console.log('some test');
this.metadata.defineMetadata('someTest', 'key', 'value')
}
}// index.ts
import {Runner} from '@magiqan/runner';
const runnner = new Runner(process.cwd());
runner.addFile('./test.ts');
const result = await runner.run();
console.log(result);
/**
output:
[{
"path": "<resolved path>/test.ts",
"results": [
{
"name": "SomeTest",
"result": "passed",
"results": [
{
"start": 1634206879837,
"result": "passed",
"name": "beforeAll",
"metadata": {
"some key": "some value"
},
"stop": 1634206879839,
"isHook": true,
"kind": "beforeAll"
},
{
"kind": "test",
"name": "someTest",
"start": 1634206879840,
"isHook": false,
"result": "passed",
"metadata": {
"key": "value"
},
"stop": 1634206879841
}
],
"start": 1634206879834,
"metadata": {},
"stop": 1634206879842
}
],
"result": "passed"
}]
*/import {Test, testable, test} from '@magiqan/core';
@testable()
class A extends Test {
@test()
testMethod(){
this.defineMetadata('testMethod', 'metaKey', 'metaValue');
console.log('passed');
}
}// custom_reporter.ts
import {Reporter} from '@magiqan/reporter'
class MyReporter extends Reporter {}
// or
// file_reporter.ts
import {FileReporter} from '@magiqan/reporter'
class XmlReporter extends FileReporter {
constructor(myFile){
super(/** file path */, myFile);
}
onFileResult(result){
this.stream.write(tansformResultToXML(result));
}
}
tansformResultToXML(result){
// define transformation
}
// or HTTP reporter
import {HTTPReporter} from '@magiqan/reporter'
class XmlReporter extends HTTPReporter {
constructor(myFile){
super(/** file path */, myFile);
}
async onFileResult(result){
await this.http.post('/result', JSON.stringify(result))
}
}MagiQAn