Я не уверен, есть ли какой-нибудь простой способ сделать это, но вы можете попробовать запустить Mocha программно .
Вот немного грязная версия того, что это могло
data.js
var Promise = require('bluebird')
module.exports.tests = []
function getTests () {
return Promise.resolve('kitty pancake')
.delay(500)
.then(function (value) {
module.exports.tests = [
{
'arg': 'kitty',
'expect': value
},
{
'arg': 'doggy',
'expect': 'doggy pancake'
}
]
})
}
module.exports.getTests = getTests
test-launcher.js
var Mocha = require('mocha'),
fs = require('fs'),
path = require('path')
// First, you need to instantiate a Mocha instance.
var mocha = new Mocha()
// Then, you need to use the method "addFile" on the mocha
// object for each file.
// Here is an example:
fs.readdirSync('test').filter(function(file){
// Only keep the .js files
return file.substr(-3) === '.js'
}).forEach(function(file){
// Use the method "addFile" to add the file to mocha
mocha.addFile(
path.join('test', file)
)
})
// make sure your tests are loaded before running the tests
require('./data').getTests().then(function () {
// Now, you can run the tests.
mocha.run(function(failures){
process.on('exit', function () {
process.exit(failures)
})
})
})
test/index.js
var assert = require('assert')
var tests = require('../data').tests
var fn = function (value) {
return value + ' ' + 'pancake'
}
describe('test', function () {
describe('example', function () {
tests.forEach(function (test) {
it('should return ' + test.expect, function (){
var value = fn(test.arg)
assert.equal(value, test.expect)
})
})
})
})
Затем вы можете запустить ваши остатки, запустив test-launcher.js
.
Короткий ответ: Вы не можете.
Более длинный ответ: Пользуйтесь библиотекой проклятий (ncurses на Unix, pdcurses в Windows). NCurses должен быть доступным через Ваш диспетчер пакетов, и и ncurses и pdcurses имеют тот же самый интерфейс (pdcurses, может также создать окна независимо из консоли, которые ведут себя как консоли).
самый трудный ответ: Используйте #ifdef _WIN32
и материал как этот, чтобы заставить Ваш код действовать по-другому на различные операционные системы.
На Linux возможно очистить консоль. Самый прекрасный путь состоит в том, чтобы записать следующую escape-последовательность в stdout:
write(1,"\E[H\E[2J",7);
, который является тем, что /usr/bin/clear делает без издержек создания другого процесса.
Нет никакой групповой команды к , очищают консоль на обеих платформах .
#include <cstdlib>
void clear_screen()
{
#ifdef WINDOWS
std::system("cls");
#else
// Assume POSIX
std::system ("clear");
#endif
}
Я знаю, что это не отвечает на мой собственный вопрос, но! Это работает на Windows (#include <windows.h>
):
void clrscr()
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord = {0, 0};
DWORD count;
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(hStdOut, &csbi);
FillConsoleOutputCharacter(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
SetConsoleCursorPosition(hStdOut, coord);
}
Это - то, как Вы делаете это на любой другой платформе, но это не работает в Windows:
cout << "\f";
, Возможно, необходимо будет сделать условную компиляцию:
void clrscr()
{
#ifdef _WIN32
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord = {0, 0};
DWORD count;
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(hStdOut, &csbi);
FillConsoleOutputCharacter(hStdOut, ' ',
csbi.dwSize.X * csbi.dwSize.Y,
coord, &count);
SetConsoleCursorPosition(hStdOut, coord);
#else
cout << "\f";
#endif
}