web-dev-qa-db-ja.com

「保留中」のテストはモカで何を意味し、どうすれば合格/不合格にすることができますか?

私はテストを実行していて、次のことに気づきました:

18 passing (150ms)
1 pending

私はこれを見たことがありません。以前は、テストは成功したか失敗したかのいずれかです。タイムアウトにより障害が発生しました。青いので、どのテストが失敗しているかがわかります。しかし、それにはタイムアウトがあります。簡略版は次のとおりです。

test(`Errors when bad thing happens`), function(){
  try {
    var actual = doThing(option)        
  } catch (err) {
    assert(err.message.includes('invalid'))
  }
  throw new Error(`Expected an error and didn't get one!`)
}
  • 「保留中」とはどういう意味ですか? Mochaが終了し、ノードが実行されなくなったときに、どのようにしてテストを「保留」にすることができますか?
  • このテストがタイムアウトしないのはなぜですか?
  • テストを成功または失敗させるにはどうすればよいですか?

ありがとう!

8
mikemaccana

テスト コールバックがあった (つまり、実際の関数、未完了)ですが、コードをリファクタリングすると問題が解決しました。問題は、エラーを予期するコードの実行方法でした。

test('Errors when bad thing happens', function() {
  var gotExpectedError = false;
  try {
    var actual = doThing(option)       
  } catch (err) {
    if ( err.message.includes('Invalid') ) {
      gotExpectedError = true
    }
  }
  if ( ! gotExpectedError ) {   
    throw new Error(`Expected an error and didn't get one!`)
  }
});
1
mikemaccana

次のように、テストのitメソッドを誤って早期に閉じた場合、テストがMochaによって「保留中」と表示される可能性があります。

// Incorrect -- arguments of the it method are closed early
it('tests some functionality'), () => {
  // Test code goes here...
};

itメソッドの引数には、次のようなテスト関数の定義を含める必要があります。

// Correct
it('tests some functionality', () => {
  // Test code goes here...
});
8
Jon Schneider

多くのテストフレームワークで保留中のテストは、ランナーが実行しないことを決定したテストです。テストがスキップされるようにフラグが立てられているためです。テストがTODOの単なるプレースホルダーだからです。

Mochaの場合、 documentation は、保留中のテストがコールバックのないテストであることを示しています。

あなたはあなたが良いテストを見ていると確信していますか?

4
Magus

この問題に直面したとき、保留中のエラーは、スキップを使用して記述テストを定義し、それを削除するのを忘れたときでした:

describe.skip('padding test', function () {
   it('good test', function () {
       expect(true).to.equal(true);
   })
});

そしてそれを実行しました、私は出力を得ました

Pending test 'good test'

また、describeテストでskipフラグを削除すると、再び機能します。

2
hadar