2012-02-24 23 views
20

我有一個簡單的JavaScript文件,color.js,和一個匹配的規格文件,colorSpec.js如何加載用於Jasmine節點測試的文件?

color.js:

function Color() 
{ 

} 

colorSpec.js:

require('./color.js'); 

describe("color", function() { 
    it("should work", function() { 
    new Color(255, 255, 255); 
    }); 
}); 

當我運行jasmine-node colorSpec.js,我得到以下異常:

ReferenceError: Color is not defined 

哪有我得到茉莉花在運行之前加載我的color.js文件colorSpec.js

+0

我剛剛發現這個問題,這是類似的:http://stackoverflow.com/questions/4662851/how-do-you-import-non-node-js-files – LandonSchropp 2012-02-26 03:49:13

回答

13

您可以使用require()在colorSpec.js中加載color.js。我沒有看到茉莉花如何在沒有告訴茉莉花的情況下猜出所有的依賴關係,它們完全在你的spec文件中。 編輯: 一個快速和骯髒的解決方案,但也許有一些內置的茉莉花做到這一點:

fs = require('fs') 
myCode = fs.readFileSync('./color.js','utf-8') // depends on the file encoding 
eval(myCode) 

那麼你的類應該可以茉莉花

如果您直接撥打電話需要在你的文件,我認爲你需要創建一個模塊並導出它

+0

我試着添加require('./ color.js');''在我的spec文件的頂部,但我仍然遇到'RefereceError'異常。 – LandonSchropp 2012-02-24 19:05:23

+0

我用更多描述更新了我的問題。 – LandonSchropp 2012-02-24 19:21:54

+0

我也更新了我的答案。 – mpm 2012-02-24 19:58:29

5

這不是需求的工作方式。你的color.js需要定義/導出一些東西。我會假設你在這裏使用require.js來理智。

color.js

define('Color', function (require) { 
    var Color = function() {}; 
    return Color; 
}); 
在規範

然後:

var Color = require('color.js'); 
+1

老實說,我沒有打算使用'require.js'。我正在構建一個顏色庫,我不想強​​迫使用它的人的任何依賴。你的答案可能是被接受的方式,但它不符合我的項目要求。 – LandonSchropp 2012-02-26 03:46:35

+0

感謝您的幫助,雖然我很感激 – LandonSchropp 2012-02-26 03:51:37

14

當使用茉莉花節點,你要導出的對象/功能/類,在這種情況下的顏色,作爲一個節點模塊。我喜歡嘗試,讓我的模塊組節點或瀏覽器中運行,像這樣:

文件夾結構:

js 
    - src/ 
     color.js 
    - spec/ 
     colorSpec.js 

的src/color.js

/** 
* class Color 
* 
* @constructor 
*/ 
function Color(red, green, blue) 
{ 
    var current = [red, green, blue]; 

    this.getCurrent = function() 
    { 
     return current; 
    } 
} 

// Export node module. 
if (typeof module !== 'undefined' && module.hasOwnProperty('exports')) 
{ 
    module.exports = Color; 
} 

規格/ colorSpec.js

var Color = require('../src/color.js'); 

describe("Test the Color object", function() { 
    var color = new Color(255, 255, 255); 

    it('to verify that it can return a color.', function() { 
     expect(color.getCurrent()).toContain(255); 
    }); 
}); 
+0

謝謝。有一個問題:我可以省略'module'存在檢查邏輯嗎?什麼時候可以將'module'設爲undefined? – 2017-05-19 16:01:02

+1

如果你從來沒打算在瀏覽器中運行它,那麼是的。 – b01 2017-05-20 14:51:22

相關問題