2012-02-24 20 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

相关问题