Случае тесты жасмина не запуская в определении в составленном машинопись


Я работаю с тестовым проектом, где я пишу чистый 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 7

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
  • простая универсальная настройка
  • конфигурации кармы и транспортира и т. д.