诗农单元测试。如何对将调用异步函数然后调用将返回回调的函数进行单元测试?

时间:2021-06-08 04:36:56

标签: javascript unit-testing sinon ava

我有一个需要测试的函数,它首先调用一个异步函数,一旦收到响应,然后返回一个调用另一个函数将回调的承诺..下面是我需要为其编写测试用例的函数:

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 是我正在测试的模块。同样在这种情况下,断言的最佳方法是什么?谢谢

0 个答案:

没有答案