2016-11-12 10 views
0

Я тестирую функцию, которая возвращается как часть обещания. Я использую chai-as-promised.проверка функции, которая была возвращена обещанием - проверка ошибок

Я могу проверить, работает ли эта функция, но я не могу проверить, что она правильно порождает ошибки.

Функция я пытаюсь проверить, оставляя много кода, связанного с обещанием:

// 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 {}; 
} 

Мои тесты:

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/); 
    });  
    }); 
}) 

Выход теста -

// console output 
1 failing 

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

Как проверить, что ошибка вызвана корреляцией? Я не уверен, что это мокко-проблема или обещание или чань-обещание. Помощь очень ценится.

ответ

0

Исключения, возникающие внутри обработчиков обещаний, преобразуются в обетования. submitTest выполняет внутри обратного вызова client.then, и, следовательно, исключение, которое он поднимает, становится отказом от обещания.

Так что вы должны сделать что-то вроде:

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