簡體   English   中英

如何從mocha.opts文件中正確地要求模塊

[英]How to properly require modules from mocha.opts file

我正在使用expect.js庫和我的mocha單元測試。 目前,我要求每個文件的第一行上的庫,如下所示:

var expect = require('expect.js');

describe('something', function () {
    it('should pass', function () {
        expect(true).to.be(true); // works
    });
});

如果可能的話,我想從每個文件的第一行刪除樣板需求代碼 ,讓我的單元測試神奇地了解expect 我以為我可以使用mocha.opts文件來做到這一點:

--require ./node_modules/expect.js/index.js

但是現在我在運行測試時遇到以下錯誤:

ReferenceError:未定義expect

這似乎是有道理的 - 它如何知道我的測試中的expect引用是指expect.js庫導出的內容?

期望庫肯定會被加載,好像我將路徑更改為不存在的東西然后mocha說:

“錯誤:找不到模塊'./does-not-exist.js'”

有什么方法可以實現我想要的嗎? 如果可能有幫助的話,我正在從gulp任務中運行我的測試。

您正確地要求模塊,但正如您所知,模塊導出的符號不會自動進入全局空間。 您可以使用自己的幫助程序模塊來解決此問題。

創建test/helper.js

var expect = require("expect.js")

global.expect = expect;

並將您的test/mocha.opts設置為:

--require test/helper

雖然路易斯的回答很明顯,但最后我用一種不同的方法解決了這個問題,使用了業力和業力猜這個插件:

安裝:

npm install karma-chai --save-dev

配置:

karma.set({

    frameworks: ['mocha', 'chai']
    // ... 
});

使用:

describe('something', function () {
    it('should pass', function () {
        expect(true).to.be(true); // works
    });
});

感謝路易斯的回答和一些擺弄,我使用mocha.opts整理了我的測試環境參考。 這是完整的設置。

我的項目是一個遺留的JavaScript應用程序,包含許多“普通”js文件,我希望在html文件中使用腳本標記和使用require進行mocha單元測試。

我不確定這是一個好習慣,但我習慣於Mocha在節點項目中進行單元測試,並且渴望使用相同的工具並且適應性最小。

我發現導出很簡單:

class Foo{...}
class Bar{...}
if (typeof module !== 'undefined') module.exports = { Foo, Bar };

要么

class Buzz{...}
if (typeof module !== 'undefined') module.exports = Buzz;

但是,嘗試在所有文件中使用require是一個問題,因為瀏覽器會抱怨變量已經聲明,即使封閉在if塊中,例如:

if (typeof require !== 'undefined') {
    var {Foo,Bar} = require('./foobar.js');    
}

所以我擺脫了文件中的require部分,並在我的測試文件夾中使用此內容設置了mocha.opts文件。 路徑相對於根文件夾:

--require test/mocha.opts.js

mocha.opts.js的內容。 路徑相對於文件的位置:

global.assert = require('assert');
global.Foo = require("../foobar.js").Foo;
global.Bar = require("../foobar.js").Bar;
global.Buzz = require("../buzz.js");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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