AVAの話 #mentaicojs

34

Transcript of AVAの話 #mentaicojs

import test from 'ava';

test(t => { t.deepEqual([1, 2], [1, 2]);});

const delayHello = (msec, callback) => setTimeout(() => callback('Hello!'), msec);

// t.endが呼ばれるまでテストを停止しない test.cb(t => { delayHello(1000, message => { t.is(message, 'Hello!'); t.end(); }); });

test(t => { // resolveするのを待ってくれる return somePromise().then(result => { t.is(result, 'unicorn'); }); });

function* generatorFun() { // 実際はファイル操作やAPIリクエストなど const a = yield Promise.resolve('a'); const b = yield Promise.resolve('b'); return `${a}:${b}`; }

test(function* (t) { const message = yield generatorFun(); t.is(message, 'a:b'); });

import test from 'ava';

const promiseFun = () => Promise.resolve('Hello!');

test(async t => { const message = await promiseFun(); t.is(message, 'Hello!'); });

import test from 'ava'; // npm i [email protected] // ECMAScript Observableの実装 // https://github.com/tc39/proposal-observable import { Observable } from 'rxjs';

// test.cbは必要なし test(t => { t.plan(3); return Observable.of(1, 2, 3, 4, 5, 6) .filter(n => (n % 2 === 0)) // 2の倍数 .map(() => t.pass()); });

const maybeThrowError = () => Promise.reject(new Error('Hello, error!!'));

test(t => { return maybeThrowError().catch(err => { t.is(err.message, 'Hello, error!!'); }); });

// 意図せずPromiseがfullfillしてる const maybeThrowError = () => Promise.resolve('Invalid fullfilled'); // Promise.reject(new Error('...'));

test(t => { return maybeThrowError().catch(err => { // そもそもここに入らないので、 // パスしちゃう...orz t.is(err.message, 'Hello, error!!'); }); });

test(t => { // 毎度両ケース書くのは複雑 return maybeThrowError() .then(() => t.fail()) .catch(err => { t.is(err.message, 'Hello, error!!'); }) }); });

test(t => { t.plan(1); return maybeThrowError().catch(err => { // ここを通らないと、 // assertionの回数が合わないので落ちる t.is(err.message, 'Hello, error!!'); }); });

🍣 🍣

🍣

🍣 🍣 🍣 🍣 🍣 🍣

🍣 🍣 🍣 🍣 🍣

🍣

🍣 🍣

🍣

🍣 🍣 🍣

"

🍣 🍣