Я настраиваю модульные тесты в своем приложении. Мой основной тест спецификации, project.spec.ts
, выглядит какИспользование karma-systemjs производит 404 для зависимостей
import {Project} from './project';
describe('Project',() => {
let p = new Project('New project');
it('should have the name given in the constructor',() => {
expect(p.name).toBe('New project');
});
});
Project
это имя класса, который я тестирование, и это определено в файле app/entities/project.ts
(т.е. в той же папке).
Однако карма производит 404 ошибку всякий раз, когда тест спецификации пытается импортировать другой файл:
01 03 2016 17:21:04.955:WARN [web-server]: 404: /base/app/entities/project
Chrome 48.0.2564 (Windows 10 0.0.0) ERROR
Error: XHR error (404 Not Found) loading C:/Dev/mps/app/entities/project
Error loading C:/Dev/mps/app/entities/project as "./project" from C:/Dev/mps/app/entities/project.spec.js
Это выглядит как скомпилированный файл project.spec.js
загружен правильно, но файл project.js не загружается. Кроме того, я не могу понять, откуда берется префикс /base/
в /base/app/entities/project
.
Аналогичный случай описан here. Однако предлагаемое решение не работает для меня. Ни один из приведенных ниже вариантов импорта работы:
let Project = require('./project');
let Project = System.import('./project'); // produces "404: /project" instead
let Project = require('./project.js');
let Project = System.import('./project.js');
Мои конфиги являются:
karma.conf.js
module.exports = function(config) {
config.set({
basePath: '',
plugins: ['karma-systemjs', 'karma-jasmine', 'karma-chrome-launcher'],
frameworks: ['systemjs', 'jasmine'],
systemjs: {
configFile: 'system.conf.js'
},
files: [
'app/entities/project.spec.js'
],
exclude: [ ],
preprocessors: { },
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
concurrency: Infinity
})
}
system.conf.js
System.config({
paths: {
'traceur': 'node_modules/traceur/bin/traceur.js',
'systemjs': 'node_modules/systemjs/dist/system.js',
'system-polyfills': 'node_modules/systemjs/dist/system-polyfills.js',
'es6-module-loader': 'node_modules/es6-module-loader/dist/es6-module-loader.js'
}
});
Что я делаю неправильно?
Вы не используете '.js' расширение в процессе импорта поэтому вам нужно либо добавить .js в операторы импорта, либо установить 'defaultJSExtensions: true' в вашем System.config (осторожно, он будет устаревать в будущем). Что касается префикса 'base', он настроен в karma-systemjs https://github.com/rolaveric/karma-systemjs/blob/master/lib/adapter.js#L109. Этот префикс используется, потому что Karma служит для файлов в каталоге/base. –
@FidanHakaj Я добавил 'defaultJSExtensions: true', но это все еще приводит к ошибке 404, хотя и цитирует файл .js:' 404:/base/app/entities/project.js'. Что касается префикса, ссылка, которую вы указали, подразумевает, что я могу переопределить ее, установив «baseURL» в конфигурацию SystemJS? Я попытался добавить 'baseURL' в' system.conf.js' и 'systemjs'' karma.conf.js ', но ничего не изменил. –