[英]Run different modules in a test_file.js in javascript in mocha
[英]JavaScript test (mocha) with 'import' js file
我理解module.export
並require
module.export
:
雖然它是可用的,只要它是一個模塊,我覺得這種方式很不方便,因為我現在打算做的是測試文件中的代碼。
例如,我在文件中有一個代碼:
app.js
'use strict';
console.log('app.js is running');
var INFINITY = 'INFINITY';
現在,我想在一個文件中測試這段代碼:
test.js
var expect = require('chai').expect;
require('./app.js');
describe('INFINITY', function()
{
it('INFINITY === "INFINITY"',
function()
{
expect(INFINITY)
.to.equal('INFINITY');
});
});
測試代碼執行app.js
,因此輸出為;
app.js is running
然后
ReferenceError: INFINITY is not defined
這不是我的預期。
我不想使用module.export
並編寫
var app = require('./app.js');
和
app.INFINITY
和app.anyOtherValue
為測試代碼中的每一行。
必須有一個聰明的方法。 你可以告訴我嗎?
謝謝。
更新:最終答復:
我以前的答案因為eval(code);
而無效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');
})
});
});
畢竟; 我在這種情況下找到的最好的方法是在同一個文件中編寫測試mocha代碼。
我通常包含一個_test
對象,其中包含對所有“私有”內部變量和函數的引用,並在導出時公開它。 在你的情況下:
./app.js
var INFINITY = 'infinity';
function foo() {
return 'bar';
}
exports._test = {
INFINITY: INFINITY,
foo: foo
}
./test/app-test.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');
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.