pathurs / alsatian-refactor-POC

A Proof of Concept for a possible refactor of Alsatian

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

alsatian-refactor-POC

A Proof of Concept for a possible refactor of Alsatian

Example API, obviously can easily be converted to Decorators

import { Runner } from './src/runner';
import { TestCase } from './src/test-case';
import { Expect } from './src/expect';
import { setImmediate } from 'timers';

const runner = new Runner();

runner.addTest(
    new TestCase(() => {
        Expect(1).toBe(0, '1 === 0'); // Fail
        Expect(1).toBe(1, '1 === 1'); // Pass
    })
);

runner.addTest(
    new TestCase(() => {
        Expect(1).not.toBe(1, '1 !== 1'); // Fail
        Expect(1).not.toBe(0, '1 !== 0'); // Pass
    })
);

runner.addTest(
    new TestCase(() => {
        Expect(Promise.reject()).toResolve('reject should resolve'); // Fail
        Expect(Promise.resolve()).toResolve('resolve should resolve'); // Pass
    })
);

runner.addTest(
    new TestCase(() => {
        Expect(Promise.resolve()).not.toResolve('resolve should not resolve'); // Fail
        Expect(Promise.reject()).not.toResolve('reject should not resolve'); // Pass
    })
);

runner.addTest(
    new TestCase(() => {
        Expect(
            new Promise((resolve, reject) => {
                setTimeout(() => {
                    reject();
                }, 100);
            })
        ).toResolve('reject after 100 milliseconds should resolve'); // Fail
        Expect(
            new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve();
                }, 20);
            })
        ).toResolve('resolve after 20 milliseconds should resolve'); // Pass
    })
);

runner.addTest(
    new TestCase(() => {
        Expect(
            new Promise((resolve, reject) => {
                setTimeout(() => {
                    reject();
                }, 10);
            })
        ).toResolve('reject after 10 milliseconds should resolve'); // Fail
        Expect(
            new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve();
                }, 2);
            })
        ).toResolve('resolve after 2 milliseconds should resolve'); // Pass
    })
);

runner.run();

// Results
//
// Failed:  Expected 1 ToBe 0.Description: 1 === 0
// Passed:  Expected 1 ToBe 1.Description: 1 === 1
// Failed:  Expected 1 not ToBe 1.Description: 1 !== 1
// Passed:  Expected 1 not ToBe 0.Description: 1 !== 0
// Failed:  Expected [object Promise] ToResolve undefined.Description: reject should resolve
// Passed:  Expected [object Promise] ToResolve undefined.Description: resolve should resolve
// Failed:  Expected [object Promise] not ToResolve undefined.Description: resolve should not resolve
// Passed:  Expected [object Promise] not ToResolve undefined.Description: reject should not resolve
// Passed:  Expected [object Promise] ToResolve undefined.Description: resolve after 2 milliseconds should resolve
// Failed:  Expected [object Promise] ToResolve undefined.Description: reject after 10 milliseconds should resolve
// Passed:  Expected [object Promise] ToResolve undefined.Description: resolve after 20 milliseconds should resolve
// Failed:  Expected [object Promise] ToResolve undefined.Description: reject after 100 milliseconds should resolve

About

A Proof of Concept for a possible refactor of Alsatian

License:MIT License


Languages

Language:TypeScript 100.0%