Случае тесты жасмина не запуская в определении в составленном машинопись
Я работаю с тестовым проектом, где я пишу чистый 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
- простая универсальная настройка
- конфигурации кармы и транспортира и т. д.