2016-11-12 2 views
0

Ich teste eine a-Funktion, die als Teil eines Versprechens zurückgegeben wird. Ich verwende chai-as-promised.Testen einer Funktion, die von einem Versprechen zurückgegeben wurde - Überprüfen auf Fehler

Ich kann testen, dass die Funktion funktioniert, aber ich kann nicht testen, dass es Fehler richtig wirft.

Die Funktion Ich versuche, zu testen, viel Code zu dem Versprechen im Zusammenhang Weglassen:

// function that we're trying to test 
submitTest = (options) => { 
    // missingParam is defined elsewhere. It works - the error is thrown if screenshot not passed 
    if (missingParam(options.screenShot)) throw new Error('Missing parameter'); 

    return {}; 
} 

Meine Tests:

describe('SpectreClient()', function() { 
    let client; 

    before(() => client = SpectreClient('foo', 'bar', testEndpoint)); 
    // the client returns a function, submitTest(), as a part of a promise 

    /* 
    omitting tests related to the client 
    */ 

    describe('submitTest()', function() { 
    let screenShot; 
    before(() => { 
     screenShot = fs.createReadStream(path.join(__dirname, '/support/test-card.png')); 
    }); 

    // this test works - it passes as expected 
    it('should return an object',() => { 
     const submitTest = client.then((response) => { 
     return response.submitTest({ screenShot }); 
     }); 
     return submitTest.should.eventually.to.be.a('object'); 
    }); 

    // this test does not work - the error is thrown before the test is evaluated 
    it('it throws an error if not passed a screenshot',() => { 
     const submitTest = client.then((response) => { 
     return response.submitTest({}); 
     }); 

     return submitTest.should.eventually.throw(Error, /Missing parameter/); 
    });  
    }); 
}) 

Der Ausgang des Test -

// console output 
1 failing 

1) SpectreClient() submitTest() it throws an error if not passed a screenshot: 
    Error: Missing parameter 

Wie kann ich testen, dass der Fehler korrekt ausgelöst wird? Ich bin mir nicht sicher, ob es sich um ein Mokka-Problem handelt oder um ein Versprechen oder eine Chai-as-Versprochen-Sache. Hilfe sehr geschätzt.

Antwort

0

Ausnahmen, die innerhalb von Verheißungshandlern ausgelöst werden, werden in Verhinderungsverweigerungen umgewandelt. submitTest wird innerhalb des Callbacks zu client.then ausgeführt, und folglich wird die Ausnahme, die es auslöst, eine Verheißungszurückweisung.

So sollten Sie so etwas wie:

return submitTest.should.be.rejectedWith(Error, /Missing parameter/) 
Verwandte Themen