9

いくつかの約束をテストするためにchai-as-promisedを使用しています。私の問題は、単一のテストで複数のステートメントを期待する方法がわからないことです。が正しく機能するためには、次のexpect().to.be.fulfilledように返す必要があります。

it('test', () => {
  return expect(promise).to.be.fulfilled
}

... またはnotify、次のように使用します。

it('test', (done) => {
  expect(promise).to.be.fulfilled.notify(done)
}

次のように、特定の関数が呼び出されるなど、チェックする必要がある別のことがある場合に問題が発生します。

it('test', (done) => {
  var promise = doSomething()
  expect(sinon_function_spy.callCount).to.equal(1)
  expect(promise).to.be.fulfilled.notify(done)
})

ここでの問題は、doSomething()が非同期であるため、sinon_function_spyを呼び出したときに への呼び出しがまだ発生していない可能性がありexpect、このテストが不安定になることです。を使用するthenと、次のようになります。

it('test', (done) => {
  var promise = doSomething()
  promise.then(() => {
    expect(sinon_function_spy.callCount).to.equal(1)
  })
  expect(promise).to.be.fulfilled.notify(done)
})

その後、テストは技術的に成功し、期待どおりに失敗しますが、then呼び出しでスローされた例外のために約束が拒否されるため、失敗します。同様に、約束が拒否されることが予想される場合がある場合:

it('test', (done) => {
  var promise = doSomething()
  promise.then(() => {
    expect(sinon_function_spy.callCount).to.equal(1)
  })
  expect(promise).to.be.rejected.notify(done)
})

次に、 promise が拒否され、 が呼び出されないため、 のチェックsinon_function_spyは呼び出されませんthen

expect両方のステートメントを確実に実行して正しい値を返すにはどうすればよいですか?

4

3 に答える 3