Ich habe einen Wrapper um die Axios XHR-Bibliothek, und ich versuche, einige Komponententests für meinen Code zu schreiben. Wenn ich jedoch meine Tests ausführen, sagen mir alle nicht, dass die Zeitüberschreitung überschritten wurde. Wie muss ich meine Tests strukturieren, um meine Behauptungen auszuführen?Komponententest verschachtelte Versprechen schlägt mit Zeitüberschreitung fehl
Hier ist der Wrapper-Code:
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))
})
}
Und der Test in Frage:
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()
})
})
})
Ich glaube nicht, dass ich Ihre Frage beantworten kann. Allerdings habe ich einen Kommentar über Ihre Verwendung von Versprechen ... Ihre 'clientRequest' -Funktion endet mit einem Rückgabewert, der ein neues Versprechen ist, das in seinem Körper eine' then' Reaktion enthält. Dies scheint gegen das zu sein, was ich über Versprechungen gelernt habe, da verschachtelte Versprechungen normalerweise (immer?) Ein Anti-Muster sind und abgeflacht werden sollten. Dies kann für Ihr unmittelbares Problem relevant sein oder auch nicht, und ich könnte vielleicht den Punkt Ihres Codes übersehen, aber Sie möchten vielleicht weiter darüber nachdenken. –
Ein paar Fragen und eine Anmerkung: 1. ist das Ergebnis Versprechen Aufruf der 'then' Inhalt? 2. Sind Sie sicher, dass Sie den 'Spion' und den' FakeClient' nicht in einem 'Vorher'-Block einrichten müssen? Hinweis: Sie können das Versprechen im Test einfach zurückgeben, ohne den 'done'-Callback zu verwenden (Mocha verstehen' Promises' und warten Sie, bis der zurückgegebene fertig ist) – MarcoL
@MarcoL das 'done' Callback entfernt zu haben scheint zu funktionieren. Ich frage mich, warum es scheitern würde? –