簡體   English   中英

使用'import'js文件進行JavaScript測試(mocha)

[英]JavaScript test (mocha) with 'import' js file

我理解module.exportrequire module.export

需要外部js文件進行mocha測試

雖然它是可用的,只要它是一個模塊,我覺得這種方式很不方便,因為我現在打算做的是測試文件中的代碼。

例如,我在文件中有一個代碼:

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.INFINITYapp.anyOtherValue為測試代碼中的每一行。

必須有一個聰明的方法。 你可以告訴我嗎?

謝謝。

更新:最終答復:

我以前的答案因為eval(code);而無效eval(code); 對變量沒用。

幸運的是, node有一個強大的方法 - vm

http://nodejs.org/api/vm.html

但是,根據文件,

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM