如何使用Jasmine节点加载文件进行测试?

时间:2012-02-24 18:56:59

标签: javascript bdd jasmine

我有一个简单的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文件?

3 个答案:

答案 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');