Случае тесты жасмина не запуская в определении в составленном машинопись
Я работаю с тестовым проектом, где я пишу чистый Javascript Jasmine Karma setup для тестирования предварительно скомпилированной настройки Typescript. Однако я не могу заставить тестовые случаи начать.
Я вижу консольные сообщения, которые приходят из скомпилированного typescript в консольном пожаре, но он просто не запускает тестовые сценарии.
Обратите внимание, что это произошло из AngularApp, но вся эта часть происходит из раздела, который был сделан и скомпилирован без Angular2.
Есть нет сообщения об ошибке, кроме того, что он показывает, что тесты 0/0 были запущены, и не было метки времени для "component/to/test".
В тесте.спекуляция.JS файл, у меня есть
define("testName", ["component/to/test"], function(component){
describe("testing module", function(){
it("should work", function(){expect(true).toEqual(true)});
})
}
В скомпилированном файле typescript, myTs.js
var requirejs, require, define;
(function (global) {
define("component/to/test" ["depend", "ences"]), function(depend,ences)
{ more code here })
some compiled typescript here
});
require.config({
path: {path to javascript libs},
shim: { ... }
})
В моем файле кармы
basePath: '',
frameworks: ['jasmine', 'requirejs'],
files: [
'lib1',
'lib2',
'spec/test-main.js',
{pattern: 'js/*.js', included: true, served: true},
{pattern: 'spec/*.spec.js', included: false, served: true}
],
exclude: [],
reporters: ['progress'],
autoWatch: true,
browsers: ['Chrome']
В моем тесте-main.js, который я получил от karma init после того, как он спросил, хочу ли я использовать requirejs.
var allTestFiles = []
var TEST_REGEXP = /(spec|test).js$/i
Object.keys(window.__karma__.files).forEach(function (file) {
if (TEST_REGEXP.test(file)) {
var normalizedTestModule = file.replace(/^/base/|.js$/g, '')
allTestFiles.push(normalizedTestModule)
}
})
require.config({
baseUrl: 'base',
deps: allTestFiles,
callback: window.__karma__.start
})
Комментарии и некоторые не связанные с ними коды были удалены для пробелов.
2 ответа:
То, что вы пытаетесь сделать, может быть сделано. Я делал это много раз, без всяких проблем.
Вы всегда должны запускать RequireJS с включенным параметром конфигурации
enforceDefine:Потому что он выявляет проблемы, которые могут остаться незамеченными. Единственный раз, когда вы не хотите, чтобы это было включено, - это если вы можете назвать существенную причину, почемуrequire.config({ enforceDefine: true, // Anything else you need. });enforceDefineплохо для вашего конкретного случая. Одна из основных проблем в коде, который вы показываете, заключается в том, что вы жестко кодируете имена модулей в вызовахdefine. Например, вы не должны этого делать. Удалите имена модулей из ваших вызововdefine. Жестко закодированные имена модулей добавляются оптимизатором, когда вы просите его создать пакеты модулей. Есть несколько случаев, когда вам может понадобиться жестко закодировать имя, но эти случаи редки, и если вы не можете назвать существенную и вескую причину, по которой вам нужно жестко закодированное имя, не делайте этого.В случае вашего тестового файла, жестко закодированное имя особенно проблематично.
test-main.jsнаправляет RequireJS для загрузки тестовых файлов. Оно фактически требуется модуль с именем что-то вродеspec/test.spec. Когда RequireJS фактически загружает ваш JavaScript-файл, соответствующий этому модулю, он находит определение для модуля с именемtestName. Таким образом, он не находит модульspec/test.specи молча терпит неудачу, потому чтоenforceDefineложно.Жестко заданное
component/to/testимя, которое вы даетеdefineвmyTs.js, вероятно, работает нормально, учитывая конфигурацию, которую вы показываете. Я все еще не рекомендую использовать там жестко закодированное имя. Вы говорите:Если вы имеете в виду временную метку кармы, то ее не может быть, потому что у вас нет файла с таким именем.Там не было метки времени для "component / to / test"
Вы не должны компилировать файлы spec с помощью
tsc, а затем запускать karma поверх файлов js.Вы должны настроить карму с помощью загрузчиков typescript, этот пакет вы должны попробовать с примером конфигурации:
Https://www.npmjs.com/package/karma-typescript#configuration
Если это угловой проект v2+, то вы определенно следует использовать @angular / cli
Https://github.com/angular/angular-cli
Он поддерживается угловой командой и дает вам много из причудливых вещей, таких как:
- prod build
- AOT build
- простая универсальная настройка
- конфигурации кармы и транспортира и т. д.