Тест JavaScript (mocha) с файлом JS " импорт
Я понимаю module.export
и require
mannner:
требуется внешний JS-файл для тестирования мокко
хотя это довольно удобно, пока это модуль, я чувствую, что этот способ неудобен, так как то, что я намерен сделать сейчас, это проверить код в файле.
например, у меня есть код в файле:
app.js
'use strict';
console.log('app.js is running');
var INFINITY = 'INFINITY';
и теперь, я хочу проверить этот код в файл:
2 ответов
UPDATE: ОКОНЧАТЕЛЬНЫЙ ОТВЕТ:
мой предыдущий ответ недействителен, так как eval(code);
не используется для переменных.
к счастью, node
имеет сильный метод - vm
однако, согласно Доку,
модуль vm имеет много известных проблем и крайних случаев. Если вы столкнулись с проблемами или неожиданным поведением, обратитесь к открытым вопросам на GitHub. Некоторые из самых больших проблемы описаны ниже.
Итак, хотя это работает на поверхности, дополнительная забота необходима для такой цели, как тестирование...
var expect = require('chai')
.expect;
var fs = require('fs');
var vm = require('vm');
var path = './app.js';
var code = fs.readFileSync(path);
vm.runInThisContext(code);
describe('SpaceTime', function()
{
describe('brabra', function()
{
it('MEMORY === "MEMORY"',
function()
{
expect(MEMORY)
.to.equal('MEMORY');
})
});
});
ПОСЛЕ ВСЕХ; Лучший способ, который я нашел в этом случае - написать тестовый код мокко в том же файле.
Я, как правило, включают в себя _test
объект, содержащий ссылки на все мои "личные" внутренние переменные и функции и выставить его на экспорт. В вашем случае:
./приложение.js
var INFINITY = 'infinity';
function foo() {
return 'bar';
}
exports._test = {
INFINITY: INFINITY,
foo: foo
}
./ test / app-тест.js
var app = require('../app.js')
/* ... */
it('should equal bar', function() {
expect(app._test.foo()).to.equal('bar');
});
it('should equal infinity', function() {
expect(app._test.INFINITY).to.equal('infinity');
});