Axios XHRライブラリのラッパーがあり、私のコードの単体テストを書こうとしています。しかし、私がテストを実行すると、タイムアウトが超過したと私に伝えられなくなります。アサーションを実行するためにテストをどのように構造化する必要がありますか?ユニットテストでネストされた約束がタイムアウトで失敗する
export const clientRequest = (xhrClient, endpoint, params = {}) => {
const method = params.method || 'get'
const {config, data, noOrg, unrestricted} = params
let reqParams = data
if (!isNil(data) && method === 'get') {
reqParams = {params: data}
}
const authConfig = unrestricted ? {...config, withCredentials: false} :
{...config, withCredentials: true}
const concatEndpoint = noOrg ? endpoint :
`${Cookies.get('organization') || 'default' }${endpoint}`
return new Promise((resolve, reject) => {
xhrClient[method](concatEndpoint, reqParams, authConfig)
.then(response => resolve(response))
.catch(err => reject(err))
})
}
、問題のテスト:
describe('clientRequest()',() => {
const resolveSpy = sinon.spy()
const fakeClient = {
get:() => new Promise(resolveSpy),
}
it.only('should make a call to the supplied method', (done) => {
const result = xhr.clientRequest(fakeClient, '/foobar', {method: 'get'})
result.then(() => {
expect(resolveSpy).to.have.beenCalledWith('/foobar', undefined, {withCredentials: true})
done()
})
})
})
私はあなたの質問に答えることはできません。しかし、私はあなたの約束の使用について一つのコメントを持っています...あなたの 'clientRequest'関数は戻り値で終わります。戻り値は、本体内に' then'反応を含む新しい約束です。これは、ネストされた約束が通常(常に?)反パターンであり、平らにされるべきであるという約束について学んだものに反するようです。これはあなたの直面する問題と関連しているかもしれませんが、私はあなたのコードのポイントを見逃している可能性がありますが、これについてさらに調べたいと思うかもしれません。 –
いくつかの質問と注記:1.「then」コンテンツを呼び出す結果の約束ですか? 2. 'spy'と' fakeClient'を 'before'ブロックに設定する必要はありませんか?注意: 'done'コールバックを使わずにテストで約束を返すことができます(mochaは' Promises'を理解し、返されたものを待ちます) – MarcoL
@MarcoLは 'done'コールバックを削除しているようです。なぜそれが失敗するのだろうか? –