javascript - 如何测试记录到控制台的方法?
问题描述
我想测试正确记录(到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))
})
})
解决方案
测试依赖性的一种方法是为 logger 创建一个 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);
})
})
推荐阅读
- c# - 用于本地化的 ASP.NET Core 3.1 Identity 开箱即用资源文件
- laravel-8 - Laravel 8中外键的UUID类型
- codenameone - 以相同名称保存时文件是否会在 Codenameone 中被覆盖
- c# - 无法使用 C# 语言在剧作家自动化中下载文件
- macos - 在我的 Mac 上安装 truffle 后,我无法在终端中运行 truffle 命令,结果总是 zsh: command not found: truffle
- xamarin.forms - 从 Xamarin 表单添加到 Ioc.Default.Configure 服务
- reactjs - React:支持使用通用 npm 包集成多个 OAuth2 授权服务器 (SSO)
- python - Twitter Stream API 提供没有文本关键字的推文
- java - 生产者消费者问题 - 找不到问题所在
- node.js - UnauthorizedError:没有授权令牌——EC2/RDS Postgres