여러 모듈을 포함 할 경우 에 당신의 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
각과에 등록 된 모든 단일 테스트하기 전에 코드를 실행합니다 it
그들은 내부에 표시할지 여부 describe
에 top
하거나에 표시 가져온 모듈의 . 를 사용 --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의 대답과 같이 객체 를 오염시키지 않는 것을 선호합니다. 이 객체는 진정으로 전역 적이며 코드가로드 할 수있는 타사 라이브러리에서도 액세스 할 수 있기 때문입니다. 이것은 내 코드에서 허용되는 것이 아닙니다.require
global
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 () {});