我有一个简单的JavaScript文件color.js
和匹配的规范文件colorSpec.js
。
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
之前让Jasmine加载colorSpec.js
文件?
答案 0 :(得分:19)
使用Jasmine Node时,您希望将对象/函数/类(在本例中为Color)导出为节点模块。我喜欢尝试让我的模块在节点或浏览器中工作,如下所示:
文件夹结构:
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);
});
});
答案 1 :(得分:15)
您可以使用require()在colorSpec.js中加载color.js。我没看到茉莉如何能够猜测所有的依赖关系,而不告诉茉莉花你的spec文件中究竟是什么。 编辑: 一个快速而肮脏的解决方案,但也许有一些内置的Jasmine可以做到这一点:
fs = require('fs')
myCode = fs.readFileSync('./color.js','utf-8') // depends on the file encoding
eval(myCode)
然后你的班级应该有茉莉花
如果您直接在您的文件上调用require,我认为您需要创建一个模块并将其导出
答案 2 :(得分:5)
这不是必须如何工作。您的color.js
需要定义/导出某些内容。我假设你在这里使用require.js来保持理智。
color.js
define('Color', function (require) {
var Color = function () {};
return Color;
});
然后在你的规范中:
var Color = require('color.js');