update docs
This commit is contained in:
parent
36574d0f34
commit
f16e25b413
3
dist/tapbundle.classes.taptest.d.ts
vendored
3
dist/tapbundle.classes.taptest.d.ts
vendored
@ -1,5 +1,6 @@
|
|||||||
import { TapTools } from './tapbundle.classes.taptools';
|
import { TapTools } from './tapbundle.classes.taptools';
|
||||||
import { HrtMeasurement } from 'early';
|
import { HrtMeasurement } from 'early';
|
||||||
|
import { Deferred } from 'smartq';
|
||||||
export declare type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | 'timeout';
|
export declare type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | 'timeout';
|
||||||
export interface ITestFunction {
|
export interface ITestFunction {
|
||||||
(tapTools?: TapTools): Promise<any>;
|
(tapTools?: TapTools): Promise<any>;
|
||||||
@ -12,6 +13,8 @@ export declare class TapTest {
|
|||||||
status: TTestStatus;
|
status: TTestStatus;
|
||||||
tapTools: TapTools;
|
tapTools: TapTools;
|
||||||
testFunction: ITestFunction;
|
testFunction: ITestFunction;
|
||||||
|
testDeferred: Deferred<TapTest>;
|
||||||
|
testPromise: Promise<TapTest>;
|
||||||
/**
|
/**
|
||||||
* constructor
|
* constructor
|
||||||
*/
|
*/
|
||||||
|
9
dist/tapbundle.classes.taptest.js
vendored
9
dist/tapbundle.classes.taptest.js
vendored
@ -8,6 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const plugins = require("./tapbundle.plugins");
|
||||||
const tapbundle_classes_taptools_1 = require("./tapbundle.classes.taptools");
|
const tapbundle_classes_taptools_1 = require("./tapbundle.classes.taptools");
|
||||||
// imported interfaces
|
// imported interfaces
|
||||||
const early_1 = require("early");
|
const early_1 = require("early");
|
||||||
@ -16,6 +17,8 @@ class TapTest {
|
|||||||
* constructor
|
* constructor
|
||||||
*/
|
*/
|
||||||
constructor(optionsArg) {
|
constructor(optionsArg) {
|
||||||
|
this.testDeferred = plugins.smartq.defer();
|
||||||
|
this.testPromise = this.testDeferred.promise;
|
||||||
this.description = optionsArg.description;
|
this.description = optionsArg.description;
|
||||||
this.hrtMeasurement = new early_1.HrtMeasurement();
|
this.hrtMeasurement = new early_1.HrtMeasurement();
|
||||||
this.parallel = optionsArg.parallel;
|
this.parallel = optionsArg.parallel;
|
||||||
@ -37,14 +40,18 @@ class TapTest {
|
|||||||
this.hrtMeasurement.stop();
|
this.hrtMeasurement.stop();
|
||||||
console.log(`ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`);
|
console.log(`ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`);
|
||||||
this.status = 'success';
|
this.status = 'success';
|
||||||
|
this.testDeferred.resolve(this);
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
this.hrtMeasurement.stop();
|
this.hrtMeasurement.stop();
|
||||||
console.log(`not ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`);
|
console.log(`not ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`);
|
||||||
|
this.testDeferred.reject();
|
||||||
|
// if the test has already succeeded before
|
||||||
if (this.status === 'success') {
|
if (this.status === 'success') {
|
||||||
this.status = 'errorAfterSuccess';
|
this.status = 'errorAfterSuccess';
|
||||||
console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull');
|
console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull');
|
||||||
}
|
}
|
||||||
|
// if the test is allowed to fail
|
||||||
if (this.failureAllowed) {
|
if (this.failureAllowed) {
|
||||||
console.log(`please note: failure allowed!`);
|
console.log(`please note: failure allowed!`);
|
||||||
}
|
}
|
||||||
@ -54,4 +61,4 @@ class TapTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.TapTest = TapTest;
|
exports.TapTest = TapTest;
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3RhcGJ1bmRsZS5jbGFzc2VzLnRhcHRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUNBLDZFQUF1RDtBQUV2RCxzQkFBc0I7QUFDdEIsaUNBQXNDO0FBVXRDO0lBUUU7O09BRUc7SUFDSCxZQUFhLFVBSVo7UUFDQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUE7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHNCQUFjLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUE7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUE7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHFDQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFBO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNHLEdBQUcsQ0FBRSxVQUFrQjs7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMzQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFDdEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUM5QixNQUFNLElBQUksS0FBSyxDQUFFLGtDQUFrQyxDQUFDLENBQUE7Z0JBQ3RELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsV0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUE7Z0JBQ3RHLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO1lBQ3pCLENBQUM7WUFBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxVQUFVLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLFdBQVcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFBO2dCQUMxRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUE7b0JBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUVBQXlFLENBQUMsQ0FBQTtnQkFDeEYsQ0FBQztnQkFDRCxFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO2dCQUM5QyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDbEIsQ0FBQztRQUNILENBQUM7S0FBQTtDQUNGO0FBbERELDBCQWtEQyJ9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3RhcGJ1bmRsZS5jbGFzc2VzLnRhcHRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLCtDQUE4QztBQUU5Qyw2RUFBdUQ7QUFFdkQsc0JBQXNCO0FBQ3RCLGlDQUFzQztBQVd0QztJQVVFOztPQUVHO0lBQ0gsWUFBYSxVQUlaO1FBVEQsaUJBQVksR0FBc0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUN4RCxnQkFBVyxHQUFxQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQTtRQVN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUE7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHNCQUFjLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUE7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUE7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHFDQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFBO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNHLEdBQUcsQ0FBRSxVQUFrQjs7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMzQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFDdEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUM5QixNQUFNLElBQUksS0FBSyxDQUFFLGtDQUFrQyxDQUFDLENBQUE7Z0JBQ3RELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsV0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUE7Z0JBQ3RHLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNqQyxDQUFDO1lBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDYixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFBO2dCQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsVUFBVSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxXQUFXLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQTtnQkFDMUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtnQkFFMUIsMkNBQTJDO2dCQUMzQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUE7b0JBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUVBQXlFLENBQUMsQ0FBQTtnQkFDeEYsQ0FBQztnQkFFRCxpQ0FBaUM7Z0JBQ2pDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUE7Z0JBQzlDLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNsQixDQUFDO1FBQ0gsQ0FBQztLQUFBO0NBQ0Y7QUExREQsMEJBMERDIn0=
|
@ -24,16 +24,51 @@ Use TypeScript for best in class instellisense.
|
|||||||
This package includes
|
This package includes
|
||||||
|
|
||||||
* tap compatible testing framework written in TypeScript
|
* tap compatible testing framework written in TypeScript
|
||||||
* npm package chai
|
* npm package chai (through smartchai)
|
||||||
* npm package chai-as-promised
|
* npm package chai-as-promised (through smartchai)
|
||||||
* npm package @types/tap
|
* npm package chai-string (through smartchai)
|
||||||
* npm pacakge @types/chai
|
* npm pacakge @types/chai (through smartchi)
|
||||||
* npm package @types/chai-as-promised
|
* npm package @types/chai-as-promised (through smartchai)
|
||||||
|
* npm package @types/chai-string (through smartchai)
|
||||||
|
|
||||||
In other words: This pacakge is fully typed :)
|
It also implements its own tap testing engine, that is fully typed.
|
||||||
|
|
||||||
|
In other words: This package is fully typed :)
|
||||||
|
|
||||||
|
|
||||||
|
### Get started with writing your first test file.
|
||||||
```javascript
|
```javascript
|
||||||
import {tap, expect} from 'tapbundle' // has typings in place
|
import {tap, expect} from 'tapbundle' // has typings in place
|
||||||
|
|
||||||
|
import * as myAwesomeModuleToTest from '../dist/index' // '../dist/index' is the standard path for npmts modules
|
||||||
|
|
||||||
|
tap.test('my awesome description', async (tools) => { // tools are optional parameter
|
||||||
|
tools.timeout(2000) // test will fail if it takes longer than 2000 millisenconds
|
||||||
|
})
|
||||||
|
|
||||||
|
let myTest2 = tap.test('my awesome test 2', async (tools) => {
|
||||||
|
myAwsomeModuleToTest.doSomethingAsync() // we don't wait here
|
||||||
|
await tools.delayFor(3000) // yay. promise based timeouts :)
|
||||||
|
console.log('This gets logged 3000 ms into the test')
|
||||||
|
})
|
||||||
|
|
||||||
|
tap.test('my awesome test 3', async (tools) => {
|
||||||
|
expect(true).to.be.true // will not throw
|
||||||
|
await expect(tools.delayFor(2000)).to.eventuall.be.fulfilled // yay expect promises :)
|
||||||
|
expect((await myTest2.promise).hrtMeasurement.milliSeconds > 1000).to.be.true // access other tests metadata :)
|
||||||
|
})
|
||||||
|
|
||||||
|
let myTest4 = tap.testParallel('my awesome test 4', async (tools) => {
|
||||||
|
await tools.delayFor(4000)
|
||||||
|
console.log('logs to console after 4 seconds into this test')
|
||||||
|
})
|
||||||
|
|
||||||
|
tap.test('my awesome test 5', async () => {
|
||||||
|
expect(myTest4.status).to.equal('pending') // since this test will likely finish before myTest4.
|
||||||
|
})
|
||||||
|
|
||||||
|
tap.start() // start the test, will automtically plan tests for you (so the tap parser knows when tests exit bofore they are finished)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
For further information read the linked docs at the top of this README.
|
For further information read the linked docs at the top of this README.
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
import * as plugins from './tapbundle.plugins'
|
||||||
import { tapCreator } from './tapbundle.tapcreator'
|
import { tapCreator } from './tapbundle.tapcreator'
|
||||||
import { TapTools } from './tapbundle.classes.taptools'
|
import { TapTools } from './tapbundle.classes.taptools'
|
||||||
|
|
||||||
// imported interfaces
|
// imported interfaces
|
||||||
import { HrtMeasurement } from 'early'
|
import { HrtMeasurement } from 'early'
|
||||||
|
import { Deferred } from 'smartq'
|
||||||
|
|
||||||
// interfaces
|
// interfaces
|
||||||
export type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | 'timeout'
|
export type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | 'timeout'
|
||||||
@ -20,6 +22,8 @@ export class TapTest {
|
|||||||
status: TTestStatus
|
status: TTestStatus
|
||||||
tapTools: TapTools
|
tapTools: TapTools
|
||||||
testFunction: ITestFunction
|
testFunction: ITestFunction
|
||||||
|
testDeferred: Deferred<TapTest> = plugins.smartq.defer()
|
||||||
|
testPromise: Promise<TapTest> = this.testDeferred.promise
|
||||||
/**
|
/**
|
||||||
* constructor
|
* constructor
|
||||||
*/
|
*/
|
||||||
@ -49,13 +53,19 @@ export class TapTest {
|
|||||||
this.hrtMeasurement.stop()
|
this.hrtMeasurement.stop()
|
||||||
console.log(`ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`)
|
console.log(`ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`)
|
||||||
this.status = 'success'
|
this.status = 'success'
|
||||||
|
this.testDeferred.resolve(this)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.hrtMeasurement.stop()
|
this.hrtMeasurement.stop()
|
||||||
console.log(`not ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`)
|
console.log(`not ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`)
|
||||||
|
this.testDeferred.reject()
|
||||||
|
|
||||||
|
// if the test has already succeeded before
|
||||||
if (this.status === 'success') {
|
if (this.status === 'success') {
|
||||||
this.status = 'errorAfterSuccess'
|
this.status = 'errorAfterSuccess'
|
||||||
console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull')
|
console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if the test is allowed to fail
|
||||||
if (this.failureAllowed) {
|
if (this.failureAllowed) {
|
||||||
console.log(`please note: failure allowed!`)
|
console.log(`please note: failure allowed!`)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user