У меня проблемы с тем, чтобы Карма загрузила мои спецификации Жасмин через RequireJS.Я начал с изучения документации и использования npm karma init для создания karma.conf.js и main-test.js.
Кажется, проблема в том, что RequireJS загружает файлы, пути кажутся правильными,но обратный вызов require, который запускает Jasmine, никогда не срабатывает, и через 30 секунд выдает ошибку тайм-аута в консоли.
Я пробовалнесколько вещей, чтобы сузить его, но, кажется, что бы я ни делал, 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);
});
});
});
});