조엘 앤드류스 는 비가 많이 오는 캐나다 서부 해안에 거주하는 다국어 개발자입니다. 그는 백엔드 개발자, 데이터베이스 관리자, DevOps 담당자, 제품 소유자, 때때로 웹 및 Android 프론트엔드 개발자 등 다양한 역할을 맡고 있으며, Kashoo에서 다양한 업무를 수행하고 있습니다. 그는 다음 분야에 대한 깊은 애정을 가지고 있습니다. 카우치베이스 (특히 카우치베이스 모바일) 데이터 스토리지 솔루션의 장단점을 논의할 때 완전히 편향되지 않습니다.
이전 글에서 블로그 게시물를 소개했습니다. synctos에서 구축하여 사용하고 있는 편리한 오픈 소스 도구입니다. Kashoo 를 사용하여 카우치베이스에 대한 포괄적인 동기화 기능을 쉽게 만들 수 있습니다. 동기화 게이트웨이. 이 글의 마지막 부분에서 synctos에는 문서 정의의 유효성을 검사하는 테스트를 작성하는 데 도움이 되는 테스트 도우미 모듈이 내장되어 있다는 사실을 암시한 적이 있습니다. 코드/설정에 버그가 있는지 테스트하는 것은 항상 좋은 생각이며, synctos 문서 정의도 마찬가지입니다.
이 글에서는 나만의 사양/테스트 사례 작성을 시작하는 데 필요한 사항을 안내해 드리겠습니다. 계속하기 전에 먼저 소개 게시물를 읽어보시면 싱크토스가 무엇이고 어떻게 작동하는지 전반적으로 이해할 수 있습니다.
먼저 다음을 설치해야 합니다. Node.js 를 설치해야 합니다. 설치가 완료되면 "package.json"이라는 새 파일로 빈 프로젝트 디렉터리를 만들어야 합니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "name": "synctos-test-examples", "devDependencies": { "expect.js": "^0.3.1", "mocha": "^3.2.0", "simple-mock": "^0.7.3", "synctos": "1.x" }, "스크립트": { "test": "./generate-sync-function.sh && node_modules/.bin/mocha" } } |
이 파일은 Node.js 패키지 관리자(npm)를 통해 싱크토스와 테스트 케이스에 필요한 종속성을 확인할 수 있습니다: expect.js 를 테스트 어설션에 사용합니다, 모카 테스트를 실행하기 위한 간단한 모의 동기화 게이트웨이의 모킹/스터빙 기능용 동기화 함수 API. 또한 mocha로 테스트를 실행하는 "test" 명령을 지정합니다.
그런 다음 프로젝트 디렉터리의 루트에서 다음 명령을 실행하여 필요한 패키지를 로컬 "node_modules" 디렉터리에 다운로드합니다:
|
1 |
npm 설치 |
프로젝트에는 몇 가지 문서 정의가 필요하므로 프로젝트의 루트 디렉터리에 "my-example-doc-definitions.js"를 만드세요:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
{ 예시 문서: { 유형 필터: 간단한 유형 필터, 채널: 함수(doc, oldDoc) { 반환 { 쓰기: [ 'write-' + doc._id ] } }, 속성 유효성 검사기: { foo: { 유형: '문자열', 필수: true, regexPattern: /^[a-z]{3}$/ } } } } |
보시다시피 이것은 데모용의 매우 간단한 문서 정의입니다. 여러분만의 문서 정의는 당연히 더 크고 복잡할 것이지만 동일한 원칙이 적용됩니다. 이 파일은 단일 문서 속성(값이 지정된 정규식을 만족해야 하는 "foo"라는 필수 문자열), 암시적 "유형" 속성의 내용을 기반으로 문서의 유형을 결정하는 간단한 유형 필터(즉, 문서의 "유형" 속성이 이 문서 유형과 일치하려면 "exampleDoc"이어야 함) 및 문서 ID에서 동적으로 구성되는 문서 채널을 정의합니다.
이제 프로젝트의 루트 디렉터리에 "generate-sync-function.sh"라는 새 파일을 만듭니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/sh -e # 현재 스크립트의 디렉터리를 결정하여 실행 위치에 관계없이 프로젝트의 루트에서 명령을 실행할 수 있습니다. 프로젝트 디렉터="$(dirname "$0")" # 생성된 동기화 기능이 생성되는 곳입니다. 출력 디렉터리="$projectDir/build" # npm으로 synctos 패키지를 다운로드한 곳입니다. synctosDir="$projectDir/node_modules/synctos" # 빌드 디렉터리가 존재하는지 확인합니다. mkdir -p "$outputDir" # 문서 정의 파일에서 동기화 기능 생성하기 "$synctosDir"/make-동기화-함수 "$projectDir/my-example-doc-definitions.js" "$outputDir/my-example-sync-function.js" |
이 파일은 프로젝트의 "build" 디렉터리에 "my-example-sync-function.js"라는 이름으로 동기화 함수를 생성하는 데 사용됩니다. "generate-sync-function.sh"를 실행하여 실행 가능한지 확인합니다:
|
1 |
chmod a+x 생성-동기화-함수.sh |
이 시점에서 문서 정의 파일에서 동기화 기능을 생성하는 데 필요한 모든 것을 갖추게 됩니다:
./generate-sync-function.sh
"build" 디렉토리를 보면 "my-example-sync-function.js"라는 완전한 형태의 Sync Gateway 동기화 함수 파일을 찾을 수 있습니다. 원한다면 동기화 함수의 내용을 동기화 게이트웨이에 삽입할 수 있습니다. 구성 파일 를 입력합니다. 이 경우 동기화 함수는 한 줄 이상이므로 백틱/역따옴표(`)로 묶어야 한다는 점을 잊지 마세요.
이제 동기화 함수의 유효성을 검사할 차례입니다! 프로젝트의 루트에 "test"라는 디렉터리를 만들고 "my-example-spec.js"라는 파일을 추가합니다:
|
1 2 3 4 5 6 7 8 9 |
var testHelper = require('../node_modules/synctos/etc/test-helper.js'); var 오류 포맷터 = testHelper.유효성 검사 오류 포맷터; 설명('내 예제 문서 정의', 함수() { // 테스트 케이스는 여기로! }); |
이것이 사양 파일의 골격입니다. 파일의 처음 두 줄은 synctos 테스트 도우미 모듈과 오류 메시지 포맷터를 가져와서 테스트 케이스 작성 프로세스를 크게 간소화합니다. "설명" 블록은 이후 단계에서 추가하는 모든 코드를 포함합니다.
그런 다음 사양 파일의 '설명' 블록에 다음 코드 조각을 추가합니다:
|
1 2 3 4 5 |
beforeEach(함수() { testHelper.init('빌드/내 예제 동기화 함수.js'); }); |
이 블록은 테스트 헬퍼 모듈이 각 테스트 케이스 시작 시(즉, 각 테스트 케이스 전) 생성된 동기화 함수의 내용으로 다시 초기화되도록 합니다.
"beforeEach" 블록 아래, 여전히 "describe" 블록 안에 다음 테스트 케이스를 추가합니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
it('모든 제약 조건이 충족되면 문서가 유효한 것으로 간주해야 함', 함수() { var doc = { _id: '내-문서-ID', 유형: 'exampleDoc', foo: 'bar' } testHelper.문서 생성 확인(doc, [ 'write-' + doc._id ]); }); |
이제 어느 정도 진전이 있습니다. 여기서는 테스트하려는 문서를 정의하고 문서 정의에서 지정한 기준을 충족하므로 문서를 만들 수 있다고 주장하고 있습니다. "verifyDocumentCreated" 함수의 두 번째 매개 변수는 쓰기 옵션에 허용되는 문서 채널의 전체 목록을 기대하며, 이를 통해 문서 정의의 채널 할당 로직이 올바른지 확인할 수 있습니다.
유효하지 않은 문서는 어떤가요? 다른 테스트 케이스를 추가하세요:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
it('세 글자가 아닌 foo 값은 유효하지 않은 것으로 간주해야 합니다', 함수() { var doc = { _id: '내-문서-ID', 유형: 'exampleDoc', foo: 'invalid' } testHelper.문서 미생성 확인( doc, doc.유형, [ 오류 포맷터.정규식 패턴 항목 위반('foo', /^[a-z]{3}$/) ], [ 'write-' + doc._id ]); }); |
문서의 "foo" 속성이 문서 정의에 지정된 정규식과 일치하지 않으므로 이 문서는 거부될 것으로 예상됩니다. "verifyDocumentNotCreated" 함수의 인수에 대한 몇 가지 참고 사항입니다:
- 테스트 중인 문서입니다.
- 예상되는 문서 유형 이름입니다.
- 실패로 인해 예상되는 모든 오류의 전체 목록입니다. "errorFormatter"는 지원되는 모든 오류 유형에 대한 포매터 함수를 노출합니다.
- 쓰기 작업에 허용되는 예상 문서 채널의 전체 목록입니다. 이전 테스트 사례에서와 마찬가지로 작업 중에 올바른 채널이 문서에 할당되었는지 확인하는 데 도움이 됩니다.
이제 몇 가지 테스트 케이스가 있으므로 프로젝트 루트에서 다음을 실행하여 테스트 스위트를 실행할 수 있습니다:
|
1 |
npm 테스트 |
두 테스트 케이스가 모두 실행되고 통과되었음을 확인할 수 있습니다(각 옆에 녹색 체크 표시가 되어 있습니다). 테스트 케이스가 실패하면 테스트 러너 도구인 모카가 자세한 오류 메시지를 생성하여 문제를 찾을 수 있도록 도와줍니다.
다음 단계는 무엇인가요? 테스트 도우미 모듈은 사양을 작성하는 데 도움을 줄 수 있는 더 많은 기능을 제공합니다. 다음 단계는 테스트 도우미 모듈의 문서 를 클릭해 다른 옵션이 있는지 알아보세요. 특히 문서가 교체되거나 삭제될 때 동기화 기능의 동작을 확인할 수도 있습니다(문서나 문서 속성을 변경할 수 없는 경우에 유용합니다). 유효성 검사 오류 메시지 포맷터의 문서 는 문서 수정이 거부될 때 반환되는 오류를 검증하는 데 큰 도움이 될 것입니다. 마지막으로 이 예제의 전체 소스 코드는 다음에서 찾을 수 있습니다. GitHub.
즐거운 테스트 되세요!