Jest를 사용한 서버측 테스트
7790 단어 nodetestingmongodbjavascript
돌이켜보면 우리는 npm을 통해 Jest 패키지를 설치하고 Jest로 첫 번째 테스트를 작성하는 것에 대해 논의한 적이 있다.만약 이 시리즈를 처음 읽는다면, 첫 번째 강좌에 따라 실행하십시오.
계속하기 전에 본 강좌에서 다루는 주제를 봅시다.
단원 테스트
단원 테스트는 일종의 소프트웨어 테스트 기술로 소프트웨어의 각 단원(부품)을 테스트한다.단원 테스트의 목적은 소프트웨어의 모든 단원이 설계에 따라 단독 임무를 수행하는지 검증하는 것이다.단원은 모든 소프트웨어 중 가장 작은 테스트 가능한 부분이다.
기교를 조롱하다
시뮬레이션은 테스트 과정에서 가상 값을 인용하여 실제 장면이나 실제 코드를 시뮬레이션하는 기술이다.시뮬레이션은 테스트의 격리를 실현하는 데 도움이 된다.아날로그는 단원 테스트에 적용된다.
매개 변수화 테스트
매개 변수화 테스트는 서로 다른 값을 사용하여 같은 테스트를 여러 번 실행할 수 있도록 합니다.이런 방법은 우리의 코드가 서로 다른 상황과 노인을 대상으로 테스트하는 것을 도울 것이다.매개 변수화 테스트에서 반드시 사용해야 하는 유행 함수는 each () 전역 함수입니다.
Jest를 NodeJ와 함께 사용하도록 구성
Jest는 주로 테스트
React
응용 프로그램에 사용되기 때문에 Jest
테스트 서버 측 응용 프로그램(예를 들어 Nodejs
을 사용하여 다시 설정해야 한다.Jest 기본 사용jsdom
테스트 환경은 노드에 유사한 브라우저를 만드는 테스트 환경을 시도합니다.js.Mongoose는 보통 jsdom
를 지원하지 않으며 jsdom
테스트 환경에서 정상적으로 작동하지 않을 것으로 예상됩니다.testEnvironment
를 노드로 변경합니다.js, jest.config.js
프로젝트의 루트 디렉터리에 새 파일 이름 tdd-with-nodejs
을 만들고 다음 코드를 복사해서 testEnvironment
파일에 추가합니다.module.exports = {
testEnvironment: 'node'
};
Jesthere를 사용하여 MongoDB를 테스트하는 것에 대해 더 많은 내용을 읽을 수 있는 아주 기본적인 설정을 찾았습니다.데이터베이스 연결 테스트
현재, 당신은 이미 우리의 처리해야 할 사항 명세서를 익혔으니, 우리들은 오늘의 일을 시작합시다.우선 가장 좋아하는 코드 편집기에서
jest.config.js
항목을 열고 "tdd-with-nodejs"
디렉터리로 이동하여 test
를 삭제하고 sum.test.js
라는 새 파일을 만듭니다.다음 코드를 복사해서
db-connection.test.js
파일에 붙여넣으십시오.require("dotenv").config();
const mongoose = require("mongoose");
const ArticleService = require("../services/ArticleService");
describe("Connection", () => {
beforeAll(async () => {
await mongoose.connect(process.env.mongoURI, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
})
});
test("Retrieve article by Id", async () => {
const id = "5ff2454f94eeee0a7acb5c30";
const article = await ArticleService.getArticlebyId(id);
expect(article.title).toBe("This is another post example");
});
afterAll(async done => {
mongoose.disconnect();
done();
});
});
우리db-coonection.test.js
를 테스트하기 위해서 우리는 DB connection
데이터베이스에 연결을 시작한 다음에 MongoDB
에서 검색 데이터를 집합하여 연결이 성공했는지 테스트해야 한다.우리는 지정한 id를 가진 글이 데이터베이스에 있는지 테스트하기 위해 시뮬레이션 기술을 사용하고 있습니다."articles"
는 코드의 나머지 부분 이전에 실행된 코드 블록이기 때문에 실제 실행beforeAll()
연결의 정확한 위치입니다.이 줄 코드;DB
우리expect(article.title).toBe("This is another post example");
에서 되돌아온 글의 제목이'다른 게시물의 예'인지 확인하기;이와 유사하게 DB
함수는 모든 테스트가 통과된 후에 코드 블록을 실행한다.afterAll() 끝점 테스트
다음 디렉토리에 붙여넣기라는 새 코드를 만듭니다.
require("dotenv").config();
const mongoose = require("mongoose");
const ArticleService = require("../services/ArticleService");
describe("Get all Articles", () => {
beforeAll(async () => {
await mongoose.connect(process.env.mongoURI, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
})
});
test("Get all Articles", async() => {
const articles = await ArticleService.getAllArticles();
expect(articles).toEqual(expect.arrayContaining(articles));
});
afterAll(async done => {
mongoose.disconnect();
done();
});
})
getallArticles () 단점의 출력이 수조로 되돌아오는지 확인하기 위해서, 우리는 apiGetAllArticles
중의 get-all-articles.test.js
, expect(articles)
, toEqual()
함수를 사용합니다.설령 이 함수들이 쓸모가 있다 하더라도 그것들의 조합 배후의 논리를 이해하는 것도 큰 장점이 있다.여기서, 우리는 그룹expect.arrayContaining(Array)
에 있는 데이터베이스에서 글을 되돌려 주었는지 검사합니다. 만약 글을 되돌려 주지 않았다면?결과는 빈 그룹 Jest
이 될 것이다.터미널Array
을 []
디렉터리에 열고 다음 코드를 복사해서 테스트를 실행합니다.$ npm test
아래 캡처 같은 답변을 받으실 거예요.때 묻은 운행 테스트
require("dotenv").config();
const mongoose = require("mongoose");
const ArticleService = require("../services/ArticleService");
describe("Should perform CRUD on article Service", () => {
beforeAll(async() => {
await mongoose.connect(process.env.mongoURI, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
})
});
test("Creat article", async() => {
const newArticle = {
title: "All the test must pass",
body: "Should the test fail, we should work had to improve our code",
avartar: "https://dev-to-uploads.s3.amazonaws.com/i/blaf4ke2xt3j08mlx4ca.png",
}
const article = await ArticleService.createArticle(newArticle);
expect(article).toEqual(expect.objectContaining(article));
});
test("Update article", async() => {
const articleToUpdate = {
title: "All the tests get passed",
body: "Should the test fail, we should work had to improve our codebase",
avartar: "https://dev-to-uploads.s3.amazonaws.com/i/blaf4ke2xt3j08mlx4ca.png",
};
const article = await ArticleService.updateArticle(articleToUpdate);
expect(article).toEqual(expect.objectContaining(article));
});
test("Get article by Id", async() => {
const articleId = "5ffcc8b0d7556519346f3bd8"
const article = await ArticleService.getArticlebyId(articleId);
expect(article).toEqual(expect.objectContaining(article));
});
test("Delete article", async() => {
const articleId = "5ffcc8fcb6f631195c9a3529";
const article = await ArticleService.deleteArticle();
expect(article).toEqual(expect.objectContaining(article));
})
afterAll(async (done) => {
mongoose.disconnect();
done()
})
})
여기서 우리는 지금까지 탐색한 모든 테스트 기술을 한데 모아 cd
의 완전한 테스트를 실행할 것이다.터미널에서 맥 사용자에게 다음 명령을 입력하거나 윈도우즈 사용자에게 명령 알림을 입력하십시오.$ npm test
모든 설정이 올바르면 터미널의 응답은 다음과 유사해야 합니다.결론
우리가 실행할 수 있는 것은
tdd-with-nodejs
이 모든 것이 우리가 지난 강좌에서 탐색한 article endpoint
와 unit-testing
디자인 모델 덕분이다.깨끗한 체계 구조를 사용하는 장점은 매우 크다. 읽기 쉽고 테스트 가능하며 효율적인 코드를 작성하는 데 도움을 줄 수 있다.이 우스갯소리 관리Documentation를 깊이 있게 연구하는 것을 환영합니다. 페이스북 개발자들은 그곳에서 많은 일을 했습니다.이 시리즈의 소스 코드에 접근할 수 있음here
읽어 주셔서 감사합니다. 당신의 편지를 기꺼이 듣겠습니다. 평론을 발표해 주십시오.
Reference
이 문제에 관하여(Jest를 사용한 서버측 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eetukudo_/server-side-testing-with-jest-1pj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)