javascript - 如何测试登录到控制台的方法?

标签 javascript node.js unit-testing

我想测试这个正确记录的方法(无论是到console.error,还是你传入的记录器)。

/**
 * Logs access errors in a way that is easy to quickly decipher the endpoint that was hit and the error that was received
 *
 * This was inspired from axios recommendation on handling errors https://www.npmjs.com/package/axios#handling-errors
 *
 * @param {Object | String} err      The error we want to log
 * @param {Object} [logger=console]  An optional logger which defaults to console
 * @public
 * @since 5.3.0
 */
function logAxiosErr(err, logger = console) {
  if (err.response) {
    const error = {
      error: `${err.response.status} - "${err.response.data}" with ${err.config.method.toUpperCase()} ${err.config.url}`,
      headers: err.config.headers,
      payload: err.config.data
    }
    // The request was made and the server responded with a status code that falls out of the range of 2xx
    logger.error(error)
  } else if (err.request) {
    // The request was made but no response was received
    // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
    // http.ClientRequest in node.js
    logger.error(err.request)
  } else if (err.message) {
    // Something happened in setting up the request that triggered an Error
    logger.error(err.message)
  } else {
    logger.error(err)
  }

这个测试显然没有测试任何东西。我如何改进它以实际测试记录的内容是否符合我的预期?

describe('#logAxiosError', () => {
    it('should log a string error ', () => {
      const err = 'SOME ERROR'
      expect(utils.logAxiosErr(err))
    })
})

最佳答案

测试依赖关系的一种方法是为记录器创建一个 spy 对象(如果使用 jasmine)并将其传递给 logAxiosErr,然后验证对 spy 对象的期望。所以在上面的测试中

describe('#logAxiosError', () => {
    it('should log a string error ', () => {
    const err = 'SOME ERROR'
    var logger = jasmine.createSpyObj('logger', ['error']);
    utils.logAxiosErr(err, logger);
    expect(logger.error).toHaveBeenCalledWith(err);
  })
})

关于javascript - 如何测试登录到控制台的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774361/

相关文章:

Node .js : redirecting urls from http to https working well with all my urls except one

objective-c - 你如何在 Xcode 中进行 TDD?

javascript - 使用 JavaScript 将模板文字添加到 html 时保留换行符

javascript - 缓存 uploadify 文件会使 chrome 崩溃

javascript - 如何在 ng-repeat angularjs 中使用多重响应?

javascript - Express 服务器静态文件夹不提供文件

java - 另一个类的 Mockito 对象方法

javascript - 如何使用 Jasmine 在 AngularJS 中为数组函数创建单元测试

javascript - Firebase 与 Web : Using user Id in reference causes error: Uncaught TypeError: Cannot read property 'on' of undefined

javascript - Bootstrap 下拉菜单以动态形式引入错位