데이터베이스에 테스트 구동 개발 적용
Split()
함수를 구현합니다.예비 지식
이 글을 따라가려면 계좌가 있어야 한다.학습 및 구축 시 register for a free Fauna account을 사용할 수 있으며 업그레이드를 준비하기 전에 결제 정보를 제공하지 않아도 됩니다.
이 글은 Fanous에 대해 충분히 익숙하다고 가정하고 데이터베이스와 클라이언트 키를 만들 수 있습니다.없으면 Fauna’s free tier을 기입하고 이 게시물을 되돌려 주십시오.
본고는 또한 당신의 개발 환경에 client application quick startv12 또는 더 높은 버전이 있다고 가정합니다.이 문서는 Node.js과 JavaScript를 사용하지만, 이러한 원칙을 Jest의 첫 번째 테스트 도구에 적용할 수 있습니다.
본고에서 사용한 원본 코드는 supported language이다.
available in Fauna Labs
TDD 개요
TDD는 실패한 테스트를 작성하는 것부터 시작합니다.예를 들어
Split()
함수를 실현하고 있다면, 이 함수는 문자열과 구분자를 받아들이고, 구분자가 나타날 때마다 문자열 그룹 'split' 를 되돌려줍니다. Split("127.0.0.1", ".")
이 ["127", "0", "0", "1"]
과 같은지 테스트합니다.테스트 세트를 처음 실행할 때, 테스트가 실패했습니다. Split()
함수를 실현하지 못했기 때문입니다.다음은 단일 코드'단원'의 기능을 실현하는데 본 예에서
Split()
함수이다.변경을 진행할 때 테스트를 실행합니다. 테스트가 통과되었을 때, 테스트가 지정한 특정한 용례를 덮어쓰는 코드를 실행했습니다.테스트를 통해 다른 용례를 덮어쓰거나 기존 코드를 재구성해서 성능이나 읽을 수 있도록 더 많은 테스트를 추가할 수 있습니다.테스트가 제자리에 있고 통과되었기 때문에, 코드가 정확한지 더 자신 있게 변경할 수 있습니다.
환경 설정
데이터베이스 설정
계정에 새 데이터베이스를 만들고 서버 역할로 키를 만듭니다.응용 프로그램에 추가할 키를 저장합니다.
농담하다
새 노드를 생성합니다.js 프로그램을 설치하고 을 설치합니다.
npm init --yes
npm install faunadb
응용 프로그램에 우스갯소리를 추가합니다.
npm install --save-dev jest babel-jest @babel/core @babel/preset-env
Fauna JavaScript driver을 편집하여 다음'테스트'와'테스트: 관찰'스크립트를 추가합니다.
{
"scripts": {
"test": "jest",
"test:watch": "jest --watchAll"
}
}
프로젝트의 루트 디렉터리에 다음 내용을 포함하는 파일 package.json을 만듭니다.
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
프로젝트의 루트 디렉터리에 다음 내용을 포함하는 파일 babel.config.js을 만듭니다.
export default {
collectCoverage: true,
coverageDirectory: "coverage",
coverageProvider: "v8",
setupFiles: ["<rootDir>/.jest/setEnvVars.js"],
};
파일 jest.config.mjs을 만들고 다음 코드를 붙여 관리자 키와 데이터베이스 값으로 바꿉니다.동물군..jest/setEnvVars.js에 문의하십시오.응용 프로그램에 이 파일을 추가합니다.gitignore는 저장소에 기밀을 제출하는 것을 피할 수 있습니다.
process.env.FAUNADB_ADMIN_KEY = '<secret_key>';
process.env.FAUNADB_DOMAIN = 'db.fauna.com';
npm run test -- --passWithNoTests
을 실행하여 Jest를 사용하도록 애플리케이션을 구성했는지 확인합니다."테스트를 찾을 수 없습니다. 종료 중입니다. 코드는 0"이라는 응답을 받을 것입니다.부분 FQL 표현식 테스트
FQL 표현식을 생성하는 JavaScript 함수를 작성하여 JavaScript에서 FQL 표현식 일부를 테스트할 수 있습니다.코드와 테스트를 가져오고 사용할 수 있도록 함수를 설정합니다.이것은 FQL 조회에서 소프트웨어 개발의'export'또는'건식'원칙을 지원한다.
don’t repeat yourself
일반 모드
다음 다섯 단계는 테스트 섹션 FQL 표현식의 일반 모드를 구성합니다.
matchers
당신의 테스트 장비를 준비하세요
fanus/lib/split라는 파일을 만들어서 캐시 루트를 만듭니다.다음 코드를 붙여넣습니다.
export function Split(str, sep) {
return undefined;
};
이것은 테스트에 사용할 수 있는 정의되지 않은 실현을 제공하여 테스트의 실패를 보장합니다.다음에 fantaus/test/split 파일을 만듭니다.테스트니 프로젝트에서실제 동물 환경에서 테스트를 실행하기 때문에 을 가져오고 다음 코드를 추가하여 새로운 동물 클라이언트를 만들어야 합니다.
import faunadb from 'faunadb';
const faunaClient = new faunadb.Client({
secret: process.env.FAUNADB_ADMIN_KEY,
domain: process.env.FAUNADB_DOMAIN || "db.fauna.com",
port: parseInt(process.env.FAUNADB_PORT) || 443,
scheme: process.env.FAUNADB_SCHEME || "https",
checkNewVersion: false,
});
그런 다음 테스트할 Split() 함수 스텁을 가져옵니다.import { Split } from '../lib/split';
다음 일반 프레임워크 코드를 복사해서 split에 붙여넣습니다.테스트js.test('<description>', async () => {
// 1. Define the input to your expression as one or more constants.
const input = ...;
// 2. Define the expected output of your expression as a constant.
const expected = ...;
// 3. Construct your FQL expression.
const expr = ...;
// 4. Evaluate your FQL expression in Fauna and save the actual output.
const actual = await faunaClient.query(expr);
// 5. Compare the actual output to the expected output.
expect(actual).toEqual(expected);
});
이 때, 당신은 이미 완전한 테스트 도구를 가지고 있지만, 자리 차지 문자 값 때문에, 테스트가 실행되지 않습니다.다음 절에서는 코드가 지정한 동작에 따라 실제 값으로 이 값을 대체합니다.Fauna JavaScript driver
실패한 테스트 만들기
다음 예제에서는 Split() 구현에 대한 예상 동작을 지정합니다.
Split(ip_address, '.')
은 IPv4 주소를 정확하게 8바이트로 구분합니다.Split(string, delimiter)
은 원소string을 포함하는 그룹을 되돌려줍니다.Split(string, delimiter)
은 빈 그룹을 되돌려줍니다.꿰미
정계부
예기한 결과
1
'127.0.0.1'
'.'
['127', '0', '0', '1']
2'Hello, world!'
'.'
['Hello, world!']
셋'................'
'.'
[]
첫 번째 테스트를 실현하려면fauna/test/split의 일반적인 프레임워크 코드를 수정하십시오.테스트js와 당신의 첫 번째 규범의 속성입니다.당신의 실현은 다를 수 있지만, 아래 코드와 유사해야 합니다.test('Split correctly separates an IPv4 address into four octets', async () => {
// 1. Define the input to your expression as one or more constants.
const input = {
string: '127.0.0.1',
delimiter: '.',
};
// 2. Define the expected output of your expression as a constant.
const expected = ['127', '0', '0', '1'];
// 3. Construct your FQL expression.
const expr = Split(input.string, input.delimiter);
// 4. Evaluate your FQL expression in Fauna and save the actual output.
const actual = await faunaClient.query(expr);
// 5. Compare the actual output to the expected output.
expect(actual).toEqual(expected);
});
앞의 코드는 Split()
이 문자열 ‘127.0.0.1'
을 각 소수점/문장에 있는 네 개의 문자열의 수조로 나누어 ['127', ‘0', '0', '1']
을 생성하기를 기대한다.Split()
을 계속 실시하기 전에 npm run test
을 사용하여 실행하는지 확인하십시오.실패해도 상관없어.이것은 당신이 아직 Split()
의 기능을 실현하지 못했기 때문에 예상한 행동입니다!테스트가 실행되지 않으면 테스트 라인의 모든 부분과 테스트 자체를 포함하는지 확인하십시오.너의 온전한 동물군/테스트/분열.테스트js는 아래와 같아야 한다.
import faunadb from 'faunadb';
import { Split } from '../lib/split';
const faunaClient = new faunadb.Client({
secret: process.env.FAUNADB_ADMIN_KEY,
domain: process.env.FAUNADB_DOMAIN || "db.fauna.com",
port: parseInt(process.env.FAUNADB_PORT) || 443,
scheme: process.env.FAUNADB_SCHEME || "https",
checkNewVersion: false,
});
test('Split correctly separates an IPv4 address into four octets', async () => {
// 1. Define the input to your expression as one or more constants.
const input = {
string: '127.0.0.1',
delimiter: '.',
};
// 2. Define the expected output of your expression as a constant.
const expected = ['127', '0', '0', '1'];
// 3. Construct your FQL expression.
const expr = Split(input.string, input.delimiter);
// 4. Evaluate your FQL expression in Fauna and save the actual output.
const actual = await faunaClient.query(expr);
// 5. Compare the actual output to the expected output.
expect(actual).toEqual(expected);
});
구현
현재 테스트 라인이 설정되어 있습니다. 감시 모드에서 테스트를 실행하십시오.
npm run test:watch
감시 모드에서 테스트 도구는 원본 파일과 테스트 파일을 감시하고 변경 사항이 검출될 때 관련 테스트 세트를 실행합니다.언제든지 작업을 저장하면 테스트 세트를 실행하는 결과를 즉시 볼 수 있으며 개발자의 피드백 순환을 강화하고 생산성을 높일 수 있습니다.
감시 모드에서 테스트를 실행할 때 실제
Split()
기능을 실현하여 테스트를 통과할 때가 되었다.fauna/lib/split에서 만든 스텁을 바꿉니다.다음 코드를 사용하십시오.이렇게 하면 내장된 FQL 작업 을 사용하여 FindStrRegex
이 나타날 때마다 매개변수 str
을 분할할 수 있습니다.import faunadb from 'faunadb';
const q = faunadb.query;
const {
Concat,
FindStrRegex,
Lambda,
Map,
Select,
Var
} = q;
export function Split(str, sep) {
return Map(
FindStrRegex(str, Concat(["[^\\", sep, "]+"])),
Lambda("res", Select(["data"], Var("res")))
);
};
Jest는 파일을 저장할 때 테스트 키트를 자동으로 다시 실행합니다. 이번에는 통과했습니다.축하합니다. 당신의 첫 번째 TDD를 FQL로 썼습니다!sep
검토 및 다음 단계
이 문서에서 TDD를 사용하여 FQL 표현식을 작성하고 테스트하는 방법을 배웠습니다.
Split()
함수에 대한 실패한 테스트를 작성했습니다. 이 함수는 문자열과 구분자 파라미터를 받아들이고, 구분자가 나타날 때마다 '분할' 하위 문자열 그룹을 되돌려줍니다.마지막으로 감시 모드에서 단원 테스트를 실행할 때 Split()
함수를 실현했다.당신의 지식을 테스트하기 위해서 나머지 두 가지 규범에 대해 테스트를 시도해 보십시오.이 테스트가 완료되고 통과되면
Split()
의 재구성을 시도한다.TDD가 회귀를 도입하지 않고 코드를 안전하게 재구성할 수 있도록 하는 방법을 주의하십시오.추가 도구 및 샘플 코드는 GitHub의 을 참조하십시오.우리는 지체없이 네가 테스트하고 무엇을 세웠는지 보고 싶다.
Reference
이 문제에 관하여(데이터베이스에 테스트 구동 개발 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fauna/applying-test-driven-development-to-your-database-4fn6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)