RequireJS не включает файлы с Кармой и Жасмин - PullRequest
0 голосов
/ 08 декабря 2018

У меня проблемы с тем, чтобы Карма загрузила мои спецификации Жасмин через RequireJS.Я начал с изучения документации и использования npm karma init для создания karma.conf.js и main-test.js.

Кажется, проблема в том, что RequireJS загружает файлы, пути кажутся правильными,но обратный вызов require, который запускает Jasmine, никогда не срабатывает, и через 30 секунд выдает ошибку тайм-аута в консоли.

enter image description here

Я пробовалнесколько вещей, чтобы сузить его, но, кажется, что бы я ни делал, RequireJS просто не включает мой foo_spec.js.Любая помощь приветствуется: -)

Файловая система

karma.conf.js
test-main.ks
/unitTests
    foo_spec.js
/myApp
    foo.js

karma.conf.js

// Karma configuration
// Generated on Fri Dec 07 2018 11:24:00 GMT-0600 (Central Standard Time)

module.exports = function(config) {
  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '',


    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine', 'requirejs'],


    // list of files / patterns to load in the browser
    files: [
        'test-main.js',
        { pattern: '/unitTests/foo_spec.js', included: false },

    ],


    // list of files / patterns to exclude
    exclude: [
    ],


    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
    },


    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress'],


    // web server port
    port: 9876,


    // enable / disable colors in the output (reporters and logs)
    colors: true,


    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,


    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: false,


    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['PhantomJS'],


    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: true,

    // Concurrency level
    // how many browser should be started simultaneous
    concurrency: Infinity
  })
}

test-main.js

var allTestFiles = []
var TEST_REGEXP = /_spec\.js$/i

// Get a list of all the test files to include
Object.keys(window.__karma__.files).forEach(function (file) {
    if (TEST_REGEXP.test(file)) {
        // Normalize paths to RequireJS module names.
        // If you require sub-dependencies of test files to be loaded as-is (requiring file extension)
        // then do not normalize the paths
        // var normalizedTestModule = file.replace(/^\/base\/|\.js$/g, '')
        // allTestFiles.push(normalizedTestModule)

        var normalizedTestModule = file.replace(/^\/base\//g, '/');
        allTestFiles.push(normalizedTestModule);

        // allTestFiles.push(file); // also does not work
    }
})

console.log('Tests to run: ', allTestFiles); // Outputs: ['/unitTests/foo_spec.js']


// window.__karma__.start(); // Console output is: "An error was thrown in afterAll\nReferenceError: Can't find variable: s"

require.config({
    // Karma serves files under /base, which is the basePath from your config file
    baseUrl: '',

    // dynamically load all test files
    // deps: allTestFiles,

    // we have to kickoff jasmine, as it is asynchronous
    callback: function() {
        console.log('This never logs')
        window.__karma__.start();
    }
})

foo_spec.js

console.log('start of file'); // does not get logged
define(function() {
    console.log('start test!'); // does not get logged
    return describe('The foo', function() {
        describe("when testing", function() {
            it("should run tests", function() {
                expect(1).toBe(1);
            });
        });
    });
});
...