Как загрузить файл для тестирования с помощью Jasmine Node? - PullRequest
23 голосов
/ 24 февраля 2012

У меня есть простой файл 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?

Ответы [ 3 ]

19 голосов
/ 07 ноября 2015

При использовании 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);
    });
});
15 голосов
/ 24 февраля 2012

вы можете загрузить свои color.js в colorSpec.js с помощью require (). Я не понимаю, как Жасмин может угадать все зависимости, не сообщая жасмину, какие они есть в вашем файле спецификации. Редактировать : Быстрое и грязное решение, но, возможно, есть что-то встроенное в Жасмин, чтобы сделать это:

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

тогда ваш класс должен быть доступен с жасмином

если вы вызываете require прямо в вашем файле, я думаю, вам нужно создать модуль и экспортировать его

5 голосов
/ 25 февраля 2012

Это не так, как требуется работает.Ваш color.js должен что-то определить / экспортировать.Я предполагаю, что вы используете require.js здесь для здравомыслия.

color.js

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

Тогда в вашей спецификации:

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