TL;DR

Faker.js (@faker-js/faker) là thư viện JavaScript/TypeScript tạo dữ liệu giả nhưng thực tế cho mục đích test và phát triển. Version v10.4.0 (phát hành 23/3/2026) đang có 62.6 triệu lượt tải/tháng15.1k sao GitHub. Hỗ trợ 70+ locale, 25+ module dữ liệu, MIT License, zero dependency, viết hoàn toàn bằng TypeScript.

Faker.js GitHub README - npm v10.4.0, 62.6M downloads/month

Vấn đề khi không có Faker

Khi viết test hoặc seed database dev, developer thường rơi vào một trong ba cái bẫy quen thuộc:

  • Hardcode dữ liệu cứng: name: "John Doe", email: "test@test.com" - test pass nhưng không bao phủ được edge case như tên có dấu, email subdomain đặc biệt, hay số điện thoại quốc tế.

  • Copy data từ production: tiện tay nhưng vi phạm quyền riêng tư người dùng, rủi ro GDPR và đôi khi còn commit lên Git.

  • Tự viết random string: "asdf1234" không phải tên người, không phải địa chỉ thật - test pass nhưng UI trông như đang bị lỗi.

Faker giải quyết cả ba: sinh dữ liệu ngẫu nhiên nhưng có nghĩa, không chạm vào data thật, và hỗ trợ seed để reproduce chính xác khi debug.

Faker hoạt động như thế nào

Faker tổ chức API theo các module tương ứng với domain thực tế. Mỗi module chứa nhiều method trả về string, number, hoặc object đúng format:

import { faker } from '@faker-js/faker';

// Set seed để reproduce kết quả giữa các lần chạy
faker.seed(42);

const user = {
  id:      faker.string.uuid(),
  name:    faker.person.fullName(),
  email:   faker.internet.email(),
  phone:   faker.phone.number(),
  address: faker.location.streetAddress(true),
  company: faker.company.name(),
  avatar:  faker.image.avatar(),
  bio:     faker.person.bio(),
};

Ngoài ra, method faker.helpers.fake() cho phép kết hợp nhiều field theo cú pháp mustache, rất tiện để tạo template phức tạp:

const intro = faker.helpers.fake(
  '{{person.firstName}} làm {{person.jobTitle}} tại {{company.name}}, {{location.city}}'
);
// Output: "Minh làm Senior Developer tại Bright Solutions, Ho Chi Minh City"

Cần tạo mảng dữ liệu nhanh? Dùng faker.helpers.multiple():

const users = faker.helpers.multiple(
  () => ({ name: faker.person.fullName(), score: faker.number.int({ min: 0, max: 100 }) }),
  { count: 1000 }
);

25+ module, 70+ locale

Faker chia dữ liệu thành các module chuyên biệt. Một số module nổi bật:

Module

Ví dụ output

person

Tên đầy đủ, bio, job title, gender, prefix

location

Địa chỉ, zip code, tọa độ GPS, tên quốc gia

finance

IBAN, số tài khoản, giao dịch, địa chỉ Bitcoin/Ethereum

internet

Email, URL, IPv4/IPv6, password, username, MAC

commerce

Tên sản phẩm, giá, mô tả, danh mục, ISBN

date

Past, future, recent, between two dates

airline

Mã chuyến bay, sân bay, ghế ngồi, hãng bay

git

Commit message, SHA hash, branch name

science

Tên nguyên tố hóa học, đơn vị đo lường

food

Tên món ăn, nguyên liệu, mô tả ẩm thực

Với 70+ locale, chỉ cần đổi import để có dữ liệu bản địa hóa. Faker hỗ trợ tiếng Việt, Nhật, Hàn, Ả Rập, và nhiều ngôn ngữ khác:

import { fakerVI } from '@faker-js/faker';
const viName = fakerVI.person.fullName(); // Ví dụ: Nguyễn Thị Lan
const viCity = fakerVI.location.city();   // Ví dụ: Hà Nội

So sánh với các alternative

Faker không phải lựa chọn duy nhất, nhưng là lựa chọn phổ biến nhất:

Thư viện

Downloads/tháng

Điểm mạnh

Hạn chế

@faker-js/faker

62.6M

Toàn diện nhất, 70+ locale, TypeScript native

Node v20+ bắt buộc

Chance.js

~8M

Statistical distributions, nhẹ hơn

Ít data module

@ngneat/falso

~1.2M

Tree-shakeable, bundle nhỏ tốt cho browser

Ít locale

MockJS

~4M

Phổ biến ở thị trường Trung Quốc, template syntax

Ít maintained

Nếu cần bundle nhỏ nhất cho browser app, @ngneat/falso thắng nhờ tree-shaking. Nếu dự án cần localization quốc tế đầy đủ hoặc các module đặc thù như airline, science, git, thì Faker là lựa chọn mặc định không cần bàn.

Giới hạn cần biết

  • Không nhất quán cross-field: city và zip code được sinh độc lập, không chắc khớp nhau trên bản đồ thật - phù hợp để test UI nhưng không nên dùng để kiểm tra geocoding logic.

  • Node.js v20+ bắt buộc từ v10: dự án cũ chạy Node 18 cần pin lại v9.x.

  • Phone number đúng format nhưng không phải số thật: không dùng được để test SMS delivery thực tế.

  • Mỗi run cho kết quả khác nhau nếu không set faker.seed() - dễ gây flaky test nếu quên.

Bắt đầu và đọc thêm

Cài đặt nhanh:

npm install --save-dev @faker-js/faker
# hoặc
pnpm add -D @faker-js/faker

Faker được xây dựng lại từ cộng đồng sau biến cố năm 2022 khi maintainer gốc cố tình phá package. Đây là ví dụ điển hình về khả năng tự phục hồi của open-source: cộng đồng fork, rewrite bằng TypeScript, duy trì CI 99% coverage, và tăng trưởng từ 0 lên 62.6M downloads/tháng chỉ trong 4 năm.

Tài liệu đầy đủ tại fakerjs.dev. Repository: github.com/faker-js/faker. Thử trực tiếp trên StackBlitz playground không cần cài đặt.

Via: fakerjs.dev/guide, GitHub faker-js.