web-dev-qa-db-ja.com

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

Jasmineでcolor.jsを実行する前にcolorSpec.jsファイルをロードするにはどうすればよいですか?

23
LandonSchropp

require()でcolorSpec.jsにcolor.jsをロードできます。 jasmineにスペックファイルの内容を正確に伝えない限り、jasmineがすべての依存関係を推測できる方法はわかりません。編集:迅速で汚い解決策ですが、それを行うための組み込みのジャスミンがあるかもしれません:

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

あなたのクラスはジャスミンで利用できるはずです

ファイルに直接requireを呼び出すと、モジュールを作成してエクスポートする必要があると思います

16
mpm

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;
}

spec/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);
    });
});
19
b01

これはrequireがどのように機能するかではありません。きみの color.js何かを定義/エクスポートする必要があります。ここでは、正気のためにrequire.jsを使用すると想定します。

color.js

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

次に、仕様で:

var Color = require('color.js');
5
ggozad