我有客戶端JavaScript,不以任何方式與DOM或網頁瀏覽器交互。我想在Travis-CI中單元測試這段代碼的功能(這只是一個奇特的數據庫/緩衝區),而無需啓動Web瀏覽器。命令行JavaScript讓我覺得我需要node.js。我瀏覽了各種單元測試庫,然後決定使用Mocha的簡單性,但是基於node.js的庫測試基於瀏覽器的模塊/類似乎過於困難。單元測試網頁瀏覽器無關的JavaScript
具體來說,我要測試的這款(簡體)瀏覽器的JavaScript有效的代碼:
// I need this NameSpace to organise my code and isolate from other code
var Nengo = {};
Nengo.DataStore = function(dims) {
this.times = [];
this.data = [];
for (var i=0; i < dims; i++) {
this.data.push([]);
}
}
Nengo.DataStore.prototype.push = function(row) {
this.times.push(row[0]);
for(var i = 0; i < this.data.length; i++){
this.data[i].push(row[i+1]);
}
}
當我嘗試在Node.js的測試,我不能正確導入Nengo命名空間的想法。這個測試甚至不能運行:
// get the datastore code from the folder below
require("../simple_data")
var assert = require("assert")
describe("DataStore", function() {
var data_store = new Nengo.DataStore(2);
it("accepts data", function() {
data_store.push([0.0, 1.1, 1.2])
assert.deepEqual(data_store.data, [[1.1], [1.2]])
});
});
它失敗,出現以下錯誤:我曾經想過解決這一被放棄節點和輸出測試結果的DOM的
/home/saubin/javascript_test/test/simple_test.js:5
var data_store = new Nengo.DataStore(2);
^
ReferenceError: Nengo is not defined
at Suite.<anonymous> (/home/saubin/javascript_test/test/simple_test.js:5:22)
at context.describe.context.context (/usr/local/lib/node_modules/mocha/lib/interfaces/bdd.js:49:10)
at Object.<anonymous> (/home/saubin/javascript_test/test/simple_test.js:4:1)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at /usr/local/lib/node_modules/mocha/lib/mocha.js:192:27
at Array.forEach (native)
at Mocha.loadFiles (/usr/local/lib/node_modules/mocha/lib/mocha.js:189:14)
at Mocha.run (/usr/local/lib/node_modules/mocha/lib/mocha.js:422:31)
at Object.<anonymous> (/usr/local/lib/node_modules/mocha/bin/_mocha:398:16)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:935:3
的一種方式無頭瀏覽器和獲得結果,但這似乎是一個很大的開銷。我可以更改我的代碼的結構以與Node.js兼容嗎?由於缺乏對該領域的瞭解,是否還有其他解決方案?
Nengo是否作爲節點模塊存在?你如何加載它? –
它不是一個節點模塊,因爲它只在客戶端瀏覽器中運行,並且從我所瞭解的它是一個實際的節點模塊,我將不得不在服務器端運行它。我按照上面的代碼所示加載它,主要是因爲我不知道如何加載它。 – Seanny123
@DaveNewton在我的最後一條評論中忘記提及你 – Seanny123