3

AVAを使用してテストを作成しようとしていますが、書き込めないようです。fnコールバック関数をすべての関数に渡し、すべてが完了したら呼び出します。私のテストは

import test from 'ava';
import fn from './index.js';

test('NonLiteral && Literal', function (t) {
  fn('test.txt', '', function (res) {
    console.log(res);
    t.is(res, '');
  });
});

解像度は

This is a test
How is it going
So far!!!

しかし、私のテストは合格だと言っています。私はこのテストに従ってきました。これが私が見てきたスニペットです

test('throwing a named function will report the to the console', function (t) {
    execCli('fixture/throw-named-function.js', function (err, stdout, stderr) {
        t.ok(err);
        t.match(stderr, /\[Function: fooFn]/);
        // TODO(jamestalmage)
        // t.ok(/1 uncaught exception[^s]/.test(stdout));
        t.end();
    });
});

誰かが私が間違っていることを説明できますか?

4

1 に答える 1

6

残念ながら、あなたが見ている単体テストtapは AVA ではなく を使用しています。(AVA 自体はテストに使用されていません... まだ)。

私はそれfnが非同期であると推測しています。その場合、おそらく使用したいでしょうtest.cb

test.cb('NonLiteral && Literal', function (t) {
    fn('test.txt', '', function (res) {
        console.log(res);
        t.is(res, '');
        t.end();
    });
});

fn今、おそらくそのコールバックを複数回呼び出すように見えますが、t.end()複数回呼び出すのはエラーです。その場合は、次のようにする必要があります。

test.cb('NonLiteral && Literal', function (t) {
    var expected = ['foo', 'bar', 'baz'];
    var i = 0;
    fn('test.txt', '', function (res) {
        t.is(res, expected[i]);
        i++;
        if (i >= expected.length) {
            t.end();
        }
    });
});

async最後に、関数とawaitキーワードを利用できるように、Promise ベースの API の実装を検討することをお勧めします。コールバックよりもはるかにクリーンなコードを作成することになります。コールバックを複数回呼び出したい場合は、Observables を検討してください。両方のテスト戦略は、AVA ドキュメントに記載されています。Observables に関する詳細情報は、Google で簡単に見つけることができます。

AVAをお試しいただきありがとうございます。それらの質問を続けてください!

于 2016-03-10T21:11:25.120 に答える