ProgramingTip

mocha.js로 여러 파일의 테스트 결합

bestdevel 2020. 10. 12. 07:56
반응형

mocha.js로 여러 파일의 테스트 결합


다음과 같이 여러 파일의 모든 테스트를 하나의 파일에 결합합니다.

  describe('Controllers', function() {
    describe('messages.js', function() {
      require('./controllertests/messages').test(options);
    })
    describe('users.js', function() {
      require('./controllertests/users').test(options);
    })
  })

나는 이것이 테스트에 참여하는 가장 좋은 방법이 아니라고 확신합니다.이 작업을 수행하는 방법에 대한 예제를 찾는 데 어려움이 있습니다.


여러를 포함 할 경우 당신의 describe당신이 당신의 질문을하고있는 같은 계층 구조를, 무슨 일을 꽤 많이 사용하는 당신이 모카에 대한 사용자 정의 테스트 로더를 쓰고 싶어하지 않는 한. 사용자 정의 로더를 작성하는 것은 이미 가지고있는 것보다 코드를 더 명확하게 만들거나 어렵습니다.

다음은 몇 가지 사항을 변경하는 방법의 예입니다. test이 예에서 하위 디렉토리는 다음과 같이 구성되어 있습니다.

.
└── test
    ├── a
    │   └── a.js
    ├── b
    │   └── b.js
    ├── common.js
    └── top.js

top.js:

function importTest(name, path) {
    describe(name, function () {
        require(path);
    });
}

var common = require("./common");

describe("top", function () {
    beforeEach(function () {
       console.log("running something before each test");
    });
    importTest("a", './a/a');
    importTest("b", './b/b');
    after(function () {
        console.log("after all tests");
    });
});

importTest기능은 describe(... require...매번 전체 내용을 다시 입력하지 일련의 모듈을 가져 오는 반복을 처리 할 수있는 방법을 것입니다. common모듈은 사용자가 테스트 스위트의 여러 모듈에서 사용할 필요 유지하기위한 것입니다. 나는 사용하지 top않습니다. 필요한 경우에는 사용할 수 있습니다.

이 점에 나는 유의한다 beforeEach각과에 등록 된 모든 one-테스트하기 전에 코드를 실행합니다 it그들은 내부에-display할지 여부 describetop하거나에-display 가져온 모듈의 . 를 사용 --recursive하면 beforeEach코드를 각 모듈에 복사해야하거나 beforeEach공통 모듈에서 서로 함수를 호출하는 각 모듈에 연결할 수 있습니다 .

또한 after후크는 제품군의 모든 테스트 후에 실행됩니다 . 로 복제 할 수 없습니다 --recursive. 각 모듈 --recursive에의 코드 를 사용 하여 추가 after하면 전체 테스트가 아닌 모듈 당 한 선택 실행 됩니다.

모든 테스트가 단일 top제목 아래 에 표시 가능한 것은 사용하여 복제 할 수 없습니다 --recursive. 으로 각 --recursive파일에있을 수있는 파일 describe("top",이 새로운 만들 것입니다 top.

common.js:

var chai = require("chai");

var options = {
    foo: "foo"
};

exports.options = options;
exports.chai = chai;
exports.assert = chai.assert;

이와 같은 이름 모듈을 사용하는 것은 여러 가지 작업을 반복 하지 않고 상태를 유지하지 않는 전역 읽기 전용 변수 또는 함수 를 수행하는 common작업입니다 . 나는 thgaskell의 대답과 같이 오염되지 않는 것을 선호합니다. 이 가지고있는 진정으로 전역 적이며 코드가로드 할 수있는 세리 라이브러리에 액세스 할 수 있기 때문입니다. 이것은 내 코드에서 허용되는 것이 아닙니다.requireglobal

a/a.js:

var common = require("../common");
var options = common.options;
var assert = common.assert;

it("blah a", function () {
    console.log(options.foo);
    assert.isTrue(false);
});

b/b.js:

it("blah b", function () {});

이것이 질문과 직접적으로 연결되어 있지는 않지만 내가 말하는 대답은 다음과 있습니다.

$ mocha --recursive

"test"폴더의 하위 디렉터리에있는 모든 테스트를 실행합니다. 산뜻한. 로드하려는 테스트 목록을 유지하고 실제로 모든 것을 실행해야하는 시간을 절약합니다.


여러 테스트 파일을 실행하는 것을 방해하지 않습니다. 일반적으로 각 테스트는 다른 테스트의 결과에 존재하지 않는 테스트 변수 공유는 원하는 작업이 아닙니다.

다음은 테스트 파일을 구성하는 방법의 예입니다.

.
├── app.js
└── test
    ├── common.js
    ├── mocha.opts
    ├── controllers
    │   ├── messages-controller.js
    │   └── users-controller.js
    └── modles
        ├── messages-model.js
        └── users-model.js

그런 다음 mocha.opts파일 내부 에서 --recursive옵션 을 설정해야합니다 .

mocha.opts

--ui bdd
--recursive

파일에 포함 모든하려는 공통 모듈 있는 경우 해당 모듈을 파일에 추가 할 수 있습니다 common.js. test디렉토리 의 루트에있는 파일은 중첩 된 디렉토리의 파일보다 실행됩니다.

common.js

global.chai = require('chai');
global.assert = chai.assert;
global.expect = chai.expect;
chai.should();
chai.config.includeStack = true;

process.env.NODE_ENV = 'test';

// Include common modules from your application that will be used among multiple test suites.
global.myModule = require('../app/myModule');

나는 제안한 제안을 제안하고 제안한 방법과 제안하는 방법이 있습니다.

내가 작업중인 프로젝트는 잘 테스트되었으며 테스트는 계속 성장하고 있습니다. 내가 사용하는 결국 require은 동기 때문에 그것을 건축에 너무 많은 변화없이 테스트를 작성하는 데 쉽게 비트 수 있기 때문에 :

// inside test/index.js

describe('V1 ROUTES', () => {
  require('./controllers/claims.test');
  require('./controllers/claimDocuments.test');
  require('./controllers/claimPhotos.test');
  require('./controllers/inspections.test');
  require('./controllers/inspectionPhotos.test');
  require('./controllers/versions.test');
  require('./services/login.v1.test');
});

describe('V2 ROUTES', () => {
  require('./services/login.v2.test');
  require('./services/dec-image.v2.test');
});

describe('V3 ROUTES', () => {
  require('./services/login.v3.test');
  require('./services/getInspectionPhotosv3.test');
  require('./services/getPolicyInfo.v3.test');
});

describe('ACTIONS', () => {
  require('./actions/notifications.test');
});

describe( 'Running automation test, Please wait for all test to complete!'.red, function () {


    var run = require( './Test.js' );

    for ( var i = 0; i < 2; i++ ) {
        run.badLogin();
        run.loginLimited();
        run.acceptJob();
        run.drivingToJob();
        run.arrivedAtJob();
        run.towingJob();
        run.arrivedDestination();
        run.jobComplete();
        run.restrictionLicensePlate();
        run.newNodeMainMenu();
        run.newNodeMainMenuToDrafts();
        run.draftDelete();
        run.resetAllData();
        run.companyVehicle();
        run.actionsScreenClockInOut();
        run.mainMenuLogout();
        run.loginAdmin();
        run.actionsScreenLogout();
    }
} );

참고 URL : https://stackoverflow.com/questions/24153261/joining-tests-from-multiple-files-with-mocha-js

반응형