因此,我正在使用企業工具,我們在其中嵌入了JavaScript腳本。這些腳本可以訪問某些內置對象。使用模擬對象在JavaScript中進行單元測試
不幸的是,該工具沒有提供任何好的方法來單元測試這些腳本。所以我的想法是將腳本保存在回購站中,模擬內置對象,然後設置在我的系統上運行的單元測試。
我對JavaScript如何在構建,類加載等方面的工作非常無知,但我一直在嘗試的東西,看看有什麼作品。我開始嘗試使用Mocha作爲節點項目(儘管它只是一個充滿腳本的目錄,而不是真正的節點項目)。默認的測試有效,但是當我嘗試從我的代碼中測試函數時,出現編譯器錯誤。
下面是我的項目中的示例腳本的外觀。我希望測試的功能,而不是整個腳本:
var thing = builtInObject.foo();
doStuff(thing);
doMoreStuff(thing);
function doStuff(thing) {
// Code
}
function doMoreStuff(thing) {
// More Code
}
這是一個測試文件看起來是這樣的:當我輸入(「規定」)的腳本
var assert = require('assert');
var sampleScript = require('../scripts/sampleScript.js');
describe('SampleScript', function() {
describe('#doStuff()', function() {
it('should do stuff', function() {
assert.equal(-1, sampleScript.doStuff("input"));
});
});
});
問題發生。我得到編譯錯誤,因爲它不是builtInObject。有沒有什麼辦法可以用mock「注入」那些內置的對象?所以我定義了這些對象包含的變量和函數,編譯器知道它們是什麼?
我接受其他框架或想法。對不起,我的無知,我不是一個真正的JavaScript傢伙。而且我知道這有點冒險,但它似乎是最好的選擇,因爲我沒有退出企業工具。
謝謝,你的方法大部分適用於我!一對夫婦跟進問題: 1。我是否也可以預定課程?有像「var builtInClass = new BuiltInClass();」的代碼以及。 2.我可以模擬一個函數的返回(就像java中的mockito那麼返回())?當我測試doMoreStuff時,我不想讓doStuff真正被調用,但我可能需要返回值。 @ antonio-narkevich – user2014969
我想我有點想出#2。使用sinon.stub我可以嘲笑doStuff()的返回。問題是,我的代碼現在被編寫的方式,它需要函數模擬或在require()時失敗。在需求之後,嘲笑該功能需要發生。我想我可能會重構我的代碼來解決這個問題。編輯:是的,我想出了一個辦法。對不起,我把它變成了我的編碼思想過程博客。 – user2014969
嘿男人。關於#1。可能你可以做一些像globa.BuiltInClass = function(){}的東西,你會沒事的。 :) –