>  기사  >  웹 프론트엔드  >  NodeJS 테스트 프레임워크 mocha에 대한 자세한 소개

NodeJS 테스트 프레임워크 mocha에 대한 자세한 소개

黄舟
黄舟원래의
2017-03-28 14:21:301622검색

이 글에서는 NodeJS에서 가장 일반적으로 사용되는 테스트 프레임워크인 mocha의 설치 및 간단한 사용법을 간략하게 소개합니다. Mocha는 Javascript 코드 테스트를 브라우저에서 직접 실행하는 것을 지원합니다.

NodeJS에서 가장 일반적으로 사용되는 테스트 프레임워크는 아마도 mocha일 것입니다. 다양한 노드 어설션 라이브러리를 지원하고, 비동기 및 동기 테스트를 모두 지원하고, 결과를 내보내는 다양한 방법을 지원하고, 브라우저에서 직접 Javascript 코드 테스트 실행도 지원합니다.

이 글의 예시는 대부분 공식 홈페이지에 있는 예시를 바탕으로 제작되었으며, 일부 예시는 필요나 제 느낌에 따라 수정되었습니다. 자세한 소개는 공식 홈페이지를 참고하세요: Mocha on Github

설치:

nodejs v0.10과 npm을 성공적으로 설치했다면 다음 명령어를 실행하세요.

# npm install -g mocha

p.s. Ubuntu의 경우 apt 소스의 nodejs 버전이 이전 버전이므로 일부 모듈은 지원되지 않습니다. nodejs 공식 웹사이트에서 소스 코드를 설치하세요.

Mocha의 첫 번째 단계:

다음은 가장 간단한 mocha 예제입니다.

var assert = require("assert");
describe('Array', function(){
 describe('#indexOf()', function(){
  it('should return -1 when the value is not present', function(){
     assert.equal(-1, [1,2,3].indexOf(5));
   assert.equal(-1, [1,2,3].indexOf(0));
 })
 })
});

describe (moduleName, testDetails) 위 코드에서 볼 수 있듯이, explain은 중첩될 수 있습니다. 예를 들어, 위 코드에 중첩된 두 개의 explain은 Array 모듈 아래의 #indexOf() 하위 모듈을 테스트하려는 테스터의 욕구로 이해될 수 있습니다. module_name은 아무렇게나 선택할 수 있지만 핵심은 이해하기 쉽게 만드는 것입니다.
it(info, function) 특정 테스트 문은 콜백 함수에 배치됩니다. 일반적으로 infostring은 예상되는 올바른 출력의 간단한 문장을 작성합니다. 설명. it 블록의 테스트가 실패하면 콘솔은 자세한 정보를 인쇄합니다. 일반적으로 출력은 가장 바깥쪽 설명의 module_name(경로나 재귀 체인 또는 콜백 체인을 따라 이해될 수 있음)에서 시작하고 마지막으로 예상 정보 콘텐츠가 충족되지 않았음을 나타내는 info를 출력합니다. 이는 exp1의 결과가 exp2와 같은지 확인하는 실제 테스트 케이스
assert.equal(exp1, exp2) 주장에 해당합니다. 여기서 채택된 동등 판단은 === 대신 ==입니다. 즉, Assert.equal(1, '1')은 True로 간주됩니다. 이것은 nodejs에서 Assert.js의 단언 형식일 뿐입니다. 또한 일반적으로 사용되는 should.js에 대해서는 아래에서 언급하겠습니다.
exp1과 exp2가 모두 문자열이고 문자열 비교에서 오류가 발생하면 콘솔은 색상을 사용하여 서로 다른 부분을 표시합니다.

비동기

Frist 단계의 코드는 당연히 동기 코드인데 비동기 코드는 어떻게 해야 할까요? 매우 간단합니다. 가장 깊은 콜백 함수에 done()을 추가하여 끝을 나타냅니다.

fs = require('fs');
describe('File', function(){
 describe('#readFile()', function(){
   it('should read test.ls without error', function(done){
   fs.readFile('test.ls', function(err){
  if (err) throw err;
  done();
  });
 })
 })
})

done ()0c6dc11e160d3b678d68754cc175188a 워터폴 프로그래밍 습관에 따르면 done이라는 이름은 콜백의 가장 깊은 지점, 즉 중첩된 콜백 함수 작성의 끝을 의미합니다. 그러나 콜백 체인의 경우 실제로 완료는 Mocha에게 여기에서 테스트를 시작하고 계층별로 콜백하도록 지시하는 것을 의미합니다.

위 예제 코드는 테스트 통과를 위한 코드입니다. test.ls를 존재하지 않는 test.as로 변경하려고 합니다. 특정 오류 위치가 반환됩니다.

여기서 질문이 있을 수 있습니다. 두 개의 비동기 함수(두 개의 포크된 콜백 체인)가 있는 경우 done()을 어디에 추가해야 하나요? 실제로 현재 하나의 it에서 테스트할 함수가 두 개 있어서는 안 됩니다. 실제로 done은 한 번만 호출할 수 있으며, done을 여러 번 호출하면 mocha에서 오류가 발생합니다. 따라서 다음과 유사해야 합니다.

fs = require('fs');
describe('File', function(){
 describe('#readFile()', function(){
   it('should read test.ls without error', function(done){
   fs.readFile('test.ls', function(err){
  if (err) throw err;
  done();
  });
 })
   it('should read test.js without error', function(done){
   fs.readFile('test.js', function(err){
  if (err) throw err;
  done();
  });
 })
 })
})

Pending

즉, 테스트 세부 정보를 생략하고 함수 본문만 유지합니다. 이는 일반적으로 프레임워크 테스트 책임자가 프레임워크를 작성하고 팀 구성원이 세부 사항을 구현하도록 하거나 테스트 세부 사항이 완전히 올바르게 구현되지 않았으며 글로벌 테스트 상황에 영향을 미치지 않도록 먼저 주석을 달아야 하는 상황에 적용 가능합니다. . 이 경우 mocha는 기본적으로 테스트 통과를 사용합니다.
파이썬의 패스와 약간 비슷하게 작동합니다.

describe('Array', function(){
 describe('#indexOf()', function(){
  it('should return -1 when the value is not present', function(){
 })
 })
});

Exclusive && Inclusive

는 실제로 이해하기 쉽고 각각 only 및 Skip 기능에 해당합니다.

fs = require('fs');
describe('File', function(){
 describe('#readFile()', function(){
   it.skip('should read test.ls without error', function(done){
   fs.readFile('test.ls', function(err){
  if (err) throw err;
  done();
  });
 })
   it('should read test.js without error', function(done){
 })
 })
})

위 코드에서는 테스트가 하나만 완료되며 하나만 실행되고 나머지는 무시됩니다. 각 기능에는 하나만 있을 수 있습니다. it.skip인 경우 이 사례는 무시됩니다.

공유만 하고 건너뛰는 기능은 건너뛰기를 차단하기 때문에 실질적인 의미는 없습니다.

fs = require('fs');
describe('File', function(){
 describe('#readFile()', function(){
   it.skip('should read test.ls without error', function(done){
   fs.readFile('test.as', function(err){
  if (err) throw err;
  done();
  });
 })
   it('should read test.js without error', function(done){
 })
 })
})

위 코드에는 test.as가 존재하지 않지만, 건너뛰기로 인해 테스트 완료가 계속 표시됩니다.

Before && After

before와 after는 단위 테스트에 자주 사용됩니다. mocha는 beforeEach()와 afterEach()도 제공합니다.
여기서는 읽기의 편의를 위해 라이브스크립트로 표현했는데, !->는 function(){}으로 이해하면 됩니다. 세부 사항을 주의 깊게 읽을 필요는 없으며 프레임워크를 통해 이러한 기능을 사용하는 방법만 이해하면 됩니다.

require! assert
require! fs
can = it


describe 'Array', !->
 beforeEach !->
 console.log 'beforeEach Array'

 before !->
 console.log 'before Array'
 
 before !->
 console.log 'before Array second time'

 after !->
 console.log 'after Array'

 describe '#indexOf()', !->
 can 'should return -1 when the value is not present', !->
  assert.equal -1, [1,2,3].indexOf 0
 can 'should return 1 when the value is not present', !->

 describe 'File', !->

 beforeEach !->
  console.log 'beforeEach file test!'

 afterEach !->
  console.log 'afterEach File test!'

 describe '#readFile()', !->
  can 'should read test.ls without error', !(done)->
  fs.readFile 'test.ls', !(err)->
   if err
   throw err
   done!
  can 'should read test.js without error', !(done)->
  fs.readFile 'test.js', !(err)->
   if err
   throw err
   done!

결과에서 알 수 있듯이(after의 사용은 before와 동일),

beforeEach는 현재 설명 아래의 모든 하위 사례에 적용됩니다.
전후 코드에 대한 특별 주문 요구 사항은 없습니다.
동일한 설명 아래에는 여러 개의 before가 있을 수 있으며, 실행 순서는 코드 순서와 동일합니다.
동일 서술자 하에서의 실행 순서는 before, beforeEach, afterEach, after입니다
before가 여러 개인 경우 가장 바깥쪽의 서술자 이전부터 실행 순서가 시작되고 나머지는 동일합니다.

테스트 주도 개발(TDD)

mocha默认的模式是Behavior Driven Develop (BDD),要想执行TDD的test的时候需要加上参数,如

mocha -u tdd test.js

前文所讲的describe, it, before, after等都属于BDD的范畴,对于TDD,我们用suite, test, setup, teardown。样例代码如下:

suite 'Array', !->
 setup !->
 console.log 'setup'

 teardown !->
 console.log 'teardown'

 suite '#indexOf()', !->
 test 'should return -1 when not present', !->
  assert.equal -1, [1,2,3].indexOf 4

위 내용은 NodeJS 테스트 프레임워크 mocha에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.