【若川视野 x 源码共读】第33期 | arrify 转数组笔记

110 阅读1分钟

本文参加了由公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。

Convert a value to an array

源码解析

export default function arrify(value) {
        // `null`或`undefined`值返回一个空数组。
	if (value === null || value === undefined) {
		return [];
	}
        // 数组类型判断
	if (Array.isArray(value)) {
		return value;
	}
        // 字符串类型判断
	if (typeof value === 'string') {
		return [value];
	}
        // 判断是否为可迭代对象(存在Symbol.iterator)
	if (typeof value[Symbol.iterator] === 'function') {
		return [...value];
	}

	return [value];
}

之前没有使用写过测试用例 第一次接触,之后需要持续练习一下

使用的插件

xo

JavaScript/TypeScript linter(ESLint 包装器)

ava

未来的测试运行器 AVA 利用node的异步特性让你的测试可以并发执行,这对于 IO 繁重的测试特别有用。另外,测试文件可以在不同的进程里并行运行,让每一个测试文件可以获得更好的性能和独立的环境。

import test from 'ava';
import arrify from './index.js';

test('main', t => {
	t.deepEqual(arrify('foo'), ['foo']);
	t.deepEqual(arrify(new Map([[1, 2], ['a', 'b']])), [[1, 2], ['a', 'b']]);
	t.deepEqual(arrify(new Set([1, 2])), [1, 2]);
	t.deepEqual(arrify(null), []);
	t.deepEqual(arrify(undefined), []);

	const fooArray = ['foo'];
	t.is(arrify(fooArray), fooArray);
});

api:

.deepEqual(value, expected, [message])

断言 value 是否和 expected 深度相等。 .is(value, expected, [message])

断言 value 是否和 expected 相等。

tsd

检查 TypeScript 类型定义

该工具允许您通过创建带有扩展名的文件来为您的类型定义(即您的.d.ts文件)编写测试用例。.test-d.ts

api

expectType(value)

检查value类型是否与T一致

package.json

参考链接: juejin.cn/post/702353…

npm包发布

参考链接:juejin.cn/post/705230…