我有一个需要测试的函数,它首先调用一个异步函数,一旦收到响应,然后返回一个调用另一个函数将回调的承诺..下面是我需要为其编写测试用例的函数:>
const bookService = require('./bookService');
const libraryService = require('./libraryService');
const findBook = (bookName) => {
libraryService.getAllBooks().then(res => {
if(res.length > 0){
//find book code based on bookName in res....
bookCode = ...;
const url = bookService.getBookUrl(bookCode) + '/booksystem?bookcode=' + bookCode;
return new Promise((resolve, reject) => {
bookService.InfoRequest(bookCode, url, {}, 'GET', res => {
if(res.error){
reject(res);
}else{
//Do things here...
resolve(res)
}
})
})
}
})
}
我试过存根 bookService.InfoRequest 方法,但它一直给我 1 个未捕获的异常说:
SyntaxError: The URL '/booksystem?bookcode=' is invalid..
我尝试控制台记录代码中的 url,它打印出来没问题。但是单元测试用例给了我未捕获的异常。
我正在使用 Ava,所以我尝试了这样的操作:
test('find Book positive test', t => {
sandbox.stub(libraryService, 'getAllBooks').resolves([
{Name : 'book1', Code : 'b1'},
{Name : 'book2', Code : 'b2'},
{Name : 'book3', Code : 'b3'}
]);
const testRes = [
{bookCode: 'b1', price : 10},
{bookCode: 'b2', price : 20},
{bookCode: 'b3', price : 30}
];
const stubBookService = sandbox.stub(bookService, 'InfoRequest');
stubBookService.callsFake((bookCode, url, {}, method, callback) => {
callback(testRes);
})
api.findBook('book1');
})
api 是我正在测试的模块。同样在这种情况下,断言的最佳方法是什么?谢谢