developer tip

모카의 글로벌`before`와`beforeEach`?

optionbox 2020. 11. 27. 08:01
반응형

모카의 글로벌`before`와`beforeEach`?


나는 지금 자바 스크립트 단위 테스트를 위해 mocha를 사용하고 있습니다.

나는 몇 가지 테스트 파일을 가지고, 각각의 파일은을 가지고 before하고 beforeEach있지만, 정확히 동일합니다.

글로벌 beforebeforeEach전체 (또는 일부)를 어떻게 제공합니까?


before또는 beforeEach별도의 파일 (을 사용 spec_helper.coffee) 선언 하고 필요합니다.

spec_helper.coffee

afterEach (done) ->
  async.parallel [
    (cb) -> Listing.remove {}, cb
    (cb) -> Server.remove {}, cb
  ], ->
    done()

test_something.coffee

require './spec_helper'

테스트 폴더의 루트에서 test/helper.jsbefore 및 beforeEach가 있는 전역 테스트 도우미 를 만듭니다.

// globals
global.assert = require('assert');

// setup
before();
beforeEach();

// teardown
after();
afterEach();

로부터 모카 문서 ...

루트 레벨 후크

파일을 선택하고 "루트"수준의 후크를 추가 할 수도 있습니다. 예를 들어 모든 describe () 블록 외부에 beforeEach ()를 추가합니다. 이것은 그것이 존재하는 파일에 관계없이 모든 테스트 케이스 이전에 beforeEach ()에 대한 콜백을 실행하게 할 것입니다 (이것은 Mocha가“root suite라고 불리는 묵시적 describe () 블록을 가지고 있기 때문입니다.

모든 일반 describe()스위트는 먼저 수집 된 다음 실행됩니다. 이것은 먼저 호출되는 것을 보장합니다.

'use strict'
let run = false

beforeEach(function() {
    if ( run === true ) return
    console.log('GLOBAL ############################')
    run = true
});

매 테스트 전에 매번 실행되는 것을 보려면 실행 플래그를 제거하십시오.

이 파일의 이름을 test/_beforeAll.test.js. 어디에서든 가져 오거나 필요로 할 필요는 없지만 파일 이름 .test.(resp. .spec.)는 중요하므로 테스트 실행자가 선택합니다.


보너스 트랙 8-) : mocha.opts\ o / 사용

무언가가 있다면 테스트를 실행하기 전에 한 번만 설정하고 싶을 것입니다 (어떤 테스트이든 ...) mocha.opts. 놀랍도록 우아한 옵션입니다! require파일 에 a 추가 하십시오 (예, 모카에 거의 기여하지 않지만 테스트 설정에 기여 함). 이전에 한 번 안정적으로 실행됩니다.

여기에 이미지 설명 입력

(이 예에서는 단일 테스트 또는 여러 테스트가 실행될 예정인지 감지합니다. 전자의 경우 every를 출력 log.info()하고 전체 실행에서는 자세한 정도를 error + warn ...)

최신 정보:

누군가가에서 실행될 모카 스위트의 기본 속성에 액세스하는 방법을 알고 있다면 once.js여기에 추가하고 싶습니다. (즉, 내- suiteMode감지가 형편없고, 다른 감지 방법이 있다면 실행해야 할 테스트 수…)


모듈을 사용하면 테스트 스위트에 대한 전역 설정 / 해체를 쉽게 할 수 있습니다. 다음은 RequireJS (AMD 모듈)를 사용하는 예입니다.

먼저 글로벌 설정 / 해체로 테스트 환경을 정의하겠습니다.

// test-env.js

define('test-env', [], function() {
  // One can store globals, which will be available within the
  // whole test suite.
  var my_global = true;

  before(function() {
    // global setup
  });
  return after(function() {
    // global teardown
  });
});

JS 실행기에서 (mocha의 HTML 실행기에 다른 라이브러리 및 테스트 파일과 함께 <script type="text/javascript">…</script>, 또는 그 이상으로 외부 JS 파일로 포함됨 ) :

require([
          // this is the important thing: require the test-env dependency first
          'test-env',

          // then, require the specs
          'some-test-file'
        ], function() {

  mocha.run();
});

some-test-file.js 다음과 같이 구현할 수 있습니다.

// some-test-file.js

define(['unit-under-test'], function(UnitUnderTest) {
  return describe('Some unit under test', function() {
    before(function() {
      // locally "global" setup
    });

    beforeEach(function() {
    });

    afterEach(function() {
    });

    after(function() {
      // locally "global" teardown
    });

    it('exists', function() {
      // let's specify the unit under test
    });
  });
});

참고 URL : https://stackoverflow.com/questions/10561598/global-before-and-beforeeach-for-mocha

반응형