mirror of https://github.com/lukechilds/ava.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
3.7 KiB
198 lines
3.7 KiB
'use strict';
|
|
const test = require('tap').test;
|
|
const Test = require('../lib/test');
|
|
const Observable = require('zen-observable'); // eslint-disable-line import/order
|
|
|
|
function ava(fn, onResult) {
|
|
return new Test({
|
|
contextRef: null,
|
|
failWithoutAssertions: true,
|
|
fn,
|
|
metadata: {type: 'test', callback: false},
|
|
onResult,
|
|
title: '[anonymous]'
|
|
});
|
|
}
|
|
|
|
ava.cb = function (fn, onResult) {
|
|
return new Test({
|
|
contextRef: null,
|
|
failWithoutAssertions: true,
|
|
fn,
|
|
metadata: {type: 'test', callback: true},
|
|
onResult,
|
|
title: '[anonymous]'
|
|
});
|
|
};
|
|
|
|
test('returning an observable from a legacy async fn is an error', t => {
|
|
let result;
|
|
const passed = ava.cb(a => {
|
|
a.plan(2);
|
|
|
|
const observable = Observable.of();
|
|
|
|
setImmediate(() => {
|
|
a.pass();
|
|
a.pass();
|
|
a.end();
|
|
});
|
|
|
|
return observable;
|
|
}, r => {
|
|
result = r;
|
|
}).run();
|
|
|
|
t.is(passed, false);
|
|
t.match(result.reason.message, /Do not return observables/);
|
|
t.end();
|
|
});
|
|
|
|
test('handle throws with thrown observable', t => {
|
|
let result;
|
|
ava(a => {
|
|
a.plan(1);
|
|
|
|
const observable = new Observable(observer => {
|
|
observer.error(new Error());
|
|
});
|
|
|
|
return a.throws(observable);
|
|
}, r => {
|
|
result = r;
|
|
}).run().then(passed => {
|
|
t.is(passed, true);
|
|
t.is(result.result.assertCount, 1);
|
|
t.end();
|
|
});
|
|
});
|
|
|
|
test('handle throws with long running thrown observable', t => {
|
|
let result;
|
|
ava(a => {
|
|
a.plan(1);
|
|
|
|
const observable = new Observable(observer => {
|
|
setTimeout(() => {
|
|
observer.error(new Error('abc'));
|
|
}, 2000);
|
|
});
|
|
|
|
return a.throws(observable, /abc/);
|
|
}, r => {
|
|
result = r;
|
|
}).run().then(passed => {
|
|
t.is(passed, true);
|
|
t.is(result.result.assertCount, 1);
|
|
t.end();
|
|
});
|
|
});
|
|
|
|
test('handle throws with completed observable', t => {
|
|
let result;
|
|
ava(a => {
|
|
a.plan(1);
|
|
|
|
const observable = Observable.of();
|
|
return a.throws(observable);
|
|
}, r => {
|
|
result = r;
|
|
}).run().then(passed => {
|
|
t.is(passed, false);
|
|
t.is(result.reason.name, 'AssertionError');
|
|
t.end();
|
|
});
|
|
});
|
|
|
|
test('handle throws with regex', t => {
|
|
let result;
|
|
ava(a => {
|
|
a.plan(1);
|
|
|
|
const observable = new Observable(observer => {
|
|
observer.error(new Error('abc'));
|
|
});
|
|
|
|
return a.throws(observable, /abc/);
|
|
}, r => {
|
|
result = r;
|
|
}).run().then(passed => {
|
|
t.is(passed, true);
|
|
t.is(result.result.assertCount, 1);
|
|
t.end();
|
|
});
|
|
});
|
|
|
|
test('handle throws with string', t => {
|
|
let result;
|
|
ava(a => {
|
|
a.plan(1);
|
|
|
|
const observable = new Observable(observer => {
|
|
observer.error(new Error('abc'));
|
|
});
|
|
|
|
return a.throws(observable, 'abc');
|
|
}, r => {
|
|
result = r;
|
|
}).run().then(passed => {
|
|
t.is(passed, true);
|
|
t.is(result.result.assertCount, 1);
|
|
t.end();
|
|
});
|
|
});
|
|
|
|
test('handle throws with false-positive observable', t => {
|
|
let result;
|
|
ava(a => {
|
|
a.plan(1);
|
|
|
|
const observable = new Observable(observer => {
|
|
observer.next(new Error());
|
|
observer.complete();
|
|
});
|
|
|
|
return a.throws(observable);
|
|
}, r => {
|
|
result = r;
|
|
}).run().then(passed => {
|
|
t.is(passed, false);
|
|
t.is(result.reason.name, 'AssertionError');
|
|
t.end();
|
|
});
|
|
});
|
|
|
|
test('handle notThrows with completed observable', t => {
|
|
let result;
|
|
ava(a => {
|
|
a.plan(1);
|
|
|
|
const observable = Observable.of();
|
|
return a.notThrows(observable);
|
|
}, r => {
|
|
result = r;
|
|
}).run().then(passed => {
|
|
t.is(passed, true);
|
|
t.is(result.result.assertCount, 1);
|
|
t.end();
|
|
});
|
|
});
|
|
|
|
test('handle notThrows with thrown observable', t => {
|
|
let result;
|
|
ava(a => {
|
|
a.plan(1);
|
|
|
|
const observable = new Observable(observer => {
|
|
observer.error(new Error());
|
|
});
|
|
|
|
return a.notThrows(observable);
|
|
}, r => {
|
|
result = r;
|
|
}).run().then(passed => {
|
|
t.is(passed, false);
|
|
t.is(result.reason.name, 'AssertionError');
|
|
t.end();
|
|
});
|
|
});
|
|
|