Файл пакета универсального/изоморфного узла модульного тестирования

Я пытаюсь создать универсальный код JavaScript (ранее известный как изоморфный код JavaScript). ) упаковка. Это означает, что он должен работать как модуль узла, но также без проблем работать в браузере.

Предположим, что это выглядит так:

// awesome.js
module.exports = function () {
    return 10;
}

Монтаж:

$> npm install awesome

и включите его:

// index.js
var awesome = require('awesome')

Чтобы использовать это в браузере, вы должны использовать browserify

$> ./node_modules/.bin/browserify index.js -o bundle.js",

Пока никаких проблем. Однако, когда дело доходит до модульного тестирования с использованием Karma и Jasmine, я получаю неопределенный module (это переменная module из awesome.js)

Конфиг кармы выглядит так:

gulp.task('test', function () {
    var Server = require('karma').Server;
    new Server({
         autoWatch: true,
         browsers: [
            'Chrome'
         ],
         coverageReporter: {
             type: 'lcov',
             dir: 'coverage/'
         },
         frameworks: [ 'browserify', 'jasmine'],
         files: [
             'awesome.js',
             'tests/spec-helpers.js',
             'tests/awesome.spec.js'
         ],
         junitReporter: {
              outputFile: 'target/junit.xml'
         },
         preprocessors: {
             'awesome.js': 'coverage',
             'tests/awesome.spec.js': ['browserify']
         },
         browserify: {
             debug: true,
             transform: [ 'brfs' ]
         },
         reporters: [
             'junit',
             'coverage'
         ],
         singleRun: false,
     }).start();
});

удивительный-spec.js

var awesome = require('awesome');

describe('Awesome', function () {
    it('should return 10', function () {
         expect(awesome()).toBe(10);
    });
});

По какой-то причине browserify не работает должным образом. Любое предложение, почему это так?

Также приветствуются любые улучшения, касающиеся universal javascript!


person Jeanluca Scaljeri    schedule 12.04.2016    source источник
comment
См. Как протестировать браузерный проект с помощью karma/jasmine.   -  person Michał Perłakowski    schedule 12.04.2016
comment
Я проверил этот пост, но не вижу ничего, что могло бы помочь в моей проблеме. Я что-то там пропустил?   -  person Jeanluca Scaljeri    schedule 12.04.2016
comment
Вы добавили watch: true к browserify: {}?   -  person Michał Perłakowski    schedule 12.04.2016
comment
Это действительно было одно отличие, которое я пробовал :) Но, к сожалению, это не сработало.   -  person Jeanluca Scaljeri    schedule 12.04.2016


Ответы (1)


Этого нельзя делать. Карма не сможет понять код узла js (на стороне сервера). Так как карма работает в браузере.

person Samuel    schedule 12.05.2018
comment
Почему нельзя связать? - person pishpish; 12.05.2018
comment
@destoryer, как вы ожидаете, что браузеры поймут node js - person Samuel; 13.05.2018
comment
Если все, о чем мы говорим, это смягчение requires, вы можете использовать упаковщик javascript (о котором спрашивает оператор) или даже транспилятор, такой как babel, для браузеров, которые понимают модули. Я не понимаю, что может использовать тестовая библиотека, которая не поддерживается браузерами. - person pishpish; 13.05.2018
comment
что, если исходный код использует некоторые специфичные для узла модули, такие как fs? как вы думаете, карма все еще может проверить этот код? - person Samuel; 13.05.2018
comment
Какой исходный код? У библиотеки тестирования нет причин зависеть от среды узла. - person pishpish; 13.05.2018
comment
Я имею в виду исходный код, который вы хотите протестировать. Кстати, карма - это не тестовая библиотека. Это средство запуска тестов, которое использует браузер для запуска тестовых файлов с исходным кодом. - person Samuel; 13.05.2018