Подтвердить что ты не робот

Как загрузить файл для тестирования с помощью жасмина Node?

У меня есть простой файл JavaScript, color.js и соответствующий файл spec, 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?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

При использовании Jasmine Node вы хотите экспортировать свой объект/функцию/класс, в этом случае Color, в качестве модуля node. Мне нравится пытаться сделать мои модули работами как в node, так и в браузере, например:

Структура папки:

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

Ответ 3

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

color.js

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

Затем в вашей спецификации:

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