Factorify 소개 - Node.js용 모델 팩토리 라이브러리
이것이 바로 Factorify가 해결하려는 문제입니다.
Adonis.js 또는 Laravel을 이미 사용했다면 모델 팩토리의 개념이 매우 친숙할 것입니다. 여기의 아이디어는 정확히 동일합니다. Factorify는 그것에서 완전히 영감을 받았습니다.
Model Factory가 다른 스택에서 작업하는 동안 테스트를 수행하는 데 정말 놓쳤던 도구라는 것을 빨리 깨달았기 때문에 Factorify를 구축했습니다(현재 작업해야 하는 스택은 Hasura/AWS Lambda입니다).
Factorify를 사용하는 대부분의 시간은 ORM 없이 스택에서 작업하거나 ORM이 동등한 기능을 제공하지 않는 경우 관련이 있습니다. 그러나 좋은 ORM이라면 어느 정도 유사한 시스템을 제공해야 합니다.
예를 들어 지금 멋진 아이들을 위한 ORM인 MikroORM은 공장을 제공합니다: https://mikro-orm.io/docs/seeding#entity-factories
Prisma ORM에는 내장 솔루션이 없는 것 같지만 다음에 대한 타사 플러그인이 있습니다. https://github.com/echobind/prisma-factory
Adonis.js의 ORM인 Lucid에도 모델 팩토리가 있습니다. https://docs.adonisjs.com/guides/models/factories
등.
Factorify는 사용이 매우 간단합니다. 게시물을 짧게 유지하기 위해 데이터베이스 구성 단계를 건너뛰지만 문서 웹 사이트에서 자세한 정보를 찾을 수 있습니다. https://factorify.julr.dev/
첫 번째 단계는 각 모델에 대한 요인을 간단히 정의하는 것입니다. 여기서 우리는 세 가지 모델, 사용자, 게시물 및 댓글이 있는 데이터베이스에서 작업할 것입니다.
사용자는 여러 게시물을 가질 수 있으며 게시물에는 여러 댓글이 있을 수 있습니다.
우리는 팩토리를 정의하는 것으로 시작합니다. 팩토리와 팩토리 간의 관계는 다음과 같습니다.
export const CommentFactory = defineFactory('comment', ({ faker }) => ({
content: faker.lorem.paragraph(),
}))
.build()
export const PostFactory = defineFactory<>('post', ({ faker }) => ({
title: faker.lorem.sentence(),
}))
// 👇 We define a relationship between the post and the comment model
.hasMany('comments', () => CommentFactory)
.build()
export const UserFactory = defineFactory<any>('user', ({ faker }) => ({
id: faker.datatype.number(),
name: faker.name.fullName(),
role: 'user'
}))
.state('admin', () => ({ role: 'admin' }))
// 👇 We define a relationship between the user and the post model
.hasMany('posts', () => PostFactory)
.build()
그리고 그게 다야! 깨끗한 테스트를 작성할 준비가 되었습니다.
모든 테스트에서 이제 팩토리를 사용하여 필요한 데이터베이스 상태를 생성할 수 있습니다.
import { UserFactory } from '../factories.js'
test('My test ', () => {
// 👇 We create 3 users, each with 2 posts, and each post with 3 comments
const user = await UserFactory
.with('posts', 2, posts => posts.with('comments', 3))
.createMany(3)
// 👇 We can also create a single admin user by applying the previously defined state
const admin = await UserFactory.apply('admin')
.with('posts', 4)
.create()
// Now you can focus on testing your business logic, without having to write
// 15 lines of code to create the database state you need 🎉
})
그리고 당신은 간다. 이렇게 하면 테스트 작성이 훨씬 쉽고 깔끔해집니다!
Factorify는 다음과 같은 많은 다른 멋진 기능을 숨깁니다.
test('Should insert user', () => {
// 👇 Calling `make` or `makeMany` will generate the model in memory, without persisting it in the database
const user = await UserFactory.make()
request(app).post('/users').send(user).expect(200)
})
// 👇 We override the name attribute of the user
const user = await UserFactory.merge({ name: 'Julien' }).create()
그리고 설명서 웹 사이트에서 찾을 수 있는 몇 가지 다른 기능: https://factorify.julr.dev/
Factorify가 유용하길 바라며 피드백이 있으면 알려주세요! 또한 프로젝트에 기여하고 싶다면 모든 PR에 열려 있습니다.
여기 GitHub에서 프로젝트를 찾을 수 있습니다: https://github.com/julien-r44/factorify/
💖을 보여주시고 마음에 드시면 프로젝트에 별표를 표시해 주시면 프로젝트에 대한 가시성을 높이는 데 많은 도움이 됩니다.
Reference
이 문제에 관하여(Factorify 소개 - Node.js용 모델 팩토리 라이브러리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/julienr/introducing-factorify-a-model-factory-library-for-nodejs-4h4p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)