Ответ 1
Mocha имеет параметр --sort
(короткий -S
), который сортирует тестовые файлы:
$ mocha --help
[...]
-S, --sort sort test files
[...]
У меня есть два файла javascript, в которых содержатся тестовые задания mocha.
//----------abc.js -------------
describe("abc file", function(){
it("test 1" , function(){
assert.equal(20 , 20);
});
});
//---------xyz.js--------------
describe("xyz file", function(){
it("test 1" , function(){
assert.equal(10 , 10);
});
});
Я положил их в папке под названием test
, и когда я исполняю mocha
командовать первые файлы (abc.js) всегда выполняются перед xyz.js. Я подумал, что это может быть связано с алфавитным порядком и переименовал файлы в
abc.js => xyz.js
xyz.js => abc.js
но все же, содержимое xyz.js (ранее abc.js) выполняется первым. Как я могу изменить порядок выполнения этих тестовых файлов?
Mocha имеет параметр --sort
(короткий -S
), который сортирует тестовые файлы:
$ mocha --help
[...]
-S, --sort sort test files
[...]
Во втором файле требуется первый:
--- two.js ---
require("./one")
Mocha будет запускать тесты в порядке выполнения describe
вызовов.
Я следую полностью отдельному решению для этого.
Поместите все ваши тесты в папку с именем test/и Создайте файл tests.js в корневом каталоге в порядке выполнения
--- tests.js ---
require('./test/one.js')
require('./test/two.js')
require('./test/three.js')
И в файлах тестов one.js, two.js и т.д. напишите ваши простые тесты мокко
таким образом, если вы хотите запустить их в указанном порядке, просто запустите mocha tests.js
Так как mocha сортирует файлы в алфавитном порядке, я обычно префишу свои имена тестовых файлов номерами, например:
0 - util.js
1 - something low level.js
2 - something more interesting.js
и др.
В дополнение к тому, чтобы быть очень прост в обслуживании (без gulp grunt или любой из этих глупостей, без редактирования вашего package.json...), он обеспечивает преимущество:
1 - something.js
, но нет ошибок в 0 - base.js
, то это, вероятно, ошибка слоя, на который распространяется 1 - something.js
Если вы делаете настоящие юнит-тесты, то порядок заказов не должен иметь значения, но я редко могу полностью с модульными тестами.
Если вы предпочитаете определенный порядок, вы можете перечислить файлы (в порядке) в качестве аргументов командной строки для mocha
, например:
$ mocha test/test-file-1.js test/test-file-2.js
Чтобы избежать многократного ввода каждый раз, когда вы хотите запустить его, вы можете превратить его в npm
script в свой package.json
:
{
// ...
"scripts": {
"test": "mocha test/test-file-1.js test/test-file-2.js"
}
// ...
}
Затем запустите свой пакет из командной строки:
$ npm test
Или, если вы используете Gulp, вы можете создать задачу в своем gulpfile.js
:
var gulp = require('gulp');
var mocha = require("gulp-mocha");
gulp.task("test", function() {
return gulp.src([
"./test/test-file-1.js",
"./test/test-file-2.js"
])
.pipe(mocha());
});
Затем запустите $ gulp test
.
Чтобы мои тесты выполнялись в определенном порядке, он создал отдельный файл test.js, а затем добавил describe
для каждого тестового файла mocha, который я хотел выполнить.
test.js:
describe('test file 1', function() {
require('./test1.js')
})
describe('test file 2', function() {
require('./test2.js')
})
Тогда просто запустите mocha test.js