2016-11-22 2 views
1

Я создал проект Angular-CLI в Webstorm, и я стараюсь, чтобы все тесты выполнялись. Он запускает браузер Chrome, но ничего не сообщает. Поэтому я изменил app.component.spec.ts в первом блоке, чтобы просто добавить инструкцию console.log, которая не входит в консоль.Angular-cli not running spec.ts files

Он ничего не сообщает или не дает никаких ошибок, пока я вручную не закрою Chrome (по какой-то причине, хотя я настроил его только на запуск, когда он не закрывается сам по себе). Он также не показывает инструкцию console.log.

Karma.config

 
// Karma configuration file, see link for more information 
// https://karma-runner.github.io/0.13/config/configuration-file.html 

module.exports = function (config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['jasmine', 'angular-cli'], 
    plugins: [ 
     require('karma-jasmine'), 
     require('karma-chrome-launcher'), 
     require('karma-remap-istanbul'), 
     require('angular-cli/plugins/karma') 
    ], 
    files: [ 
     { pattern: './src/*/*.spec.ts', watched: false } 
    ], 
    preprocessors: { 
     './src/test.ts': ['angular-cli'] 
    }, 
    mime: { 
     'text/x-typescript': ['ts','tsx'] 
    }, 
    remapIstanbulReporter: { 
     reports: { 
     html: 'coverage', 
     lcovonly: './coverage/coverage.lcov' 
     } 
    }, 
    angularCli: { 
     config: './angular-cli.json', 
     environment: 'dev' 
    }, 
    reporters: config.angularCli && config.angularCli.codeCoverage 
       ? ['progress', 'karma-remap-istanbul'] 
       : ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: false, 
    browsers: ['Chrome'], 
    singleRun: true 
    }); 
}; 

Ошибки закрытия Chrome:

 
22 11 2016 10:01:27.657:ERROR [karma]: TypeError: Cannot read property 'map' of undefined 
    at ProgressReporter._render (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\progress.js:53:26) 
    at ProgressReporter.writeCommonMsg (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\progress.js:9: 
44) 
    at ProgressReporter.BaseReporter.onBrowserError (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\reporters\b 
ase.js:63:10) 
    at Server. (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\events.js:13:22) 
    at emitTwo (events.js:111:20) 
    at Server.emit (events.js:191:7) 
    at disconnect (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\browser.js:40:13) 
    at Browser.onDisconnect (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\browser.js:157:7) 
    at Socket. (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\karma\lib\events.js:13:22) 
    at emitOne (events.js:96:13) 
    at Socket.emit (events.js:188:7) 
    at Socket.emit (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\socket.js:128:10) 
    at Socket.onclose (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\socket.js:425:8) 
    at Client.onclose (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\socket.io\lib\client.js:232:24) 
    at emitTwo (events.js:111:20) 
    at Socket.emit (events.js:191:7) 
    at Socket.onClose (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\lib\socket.js:304:10) 
    at WebSocket.g (events.js:291:16) 
    at emitNone (events.js:86:13) 
    at WebSocket.emit (events.js:185:7) 
    at WebSocket.Transport.onClose (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\lib\transport.js:126:8) 
    at WebSocket.g (events.js:291:16) 
    at emitTwo (events.js:106:13) 
    at WebSocket.emit (events.js:191:7) 
    at WebSocket.cleanupWebsocketResources (C:\Users\Amy\WebstormProjects\SportsTactician\node_modules\engine.io\node_modules\ws\lib\ 
WebSocket.js:927:10) 
    at emitOne (events.js:101:20) 
    at Socket.emit (events.js:188:7) 
    at emitErrorNT (net.js:1276:8) 
    at _combinedTickCallback (internal/process/next_tick.js:74:11) 
    at process._tickCallback (internal/process/next_tick.js:98:9)

ответ

0

Так что похоже выключая autowatch является то, что вызывает это. Если я верну это, это сработает. Также кажется, что установка singleRun в true имеет нулевой эффект при запуске через ng-тест.

Если вы хотите запустить это с помощью autoWatch false и singleRun true, вам нужно использовать начало кармы. Старая школа FTW!

Update:

Согласно Angular-CLI usage docs, использовать singleRun и не autoWatch:

Запуск модульных тестов

ng test

Тесты исполним после сборки выполняется с помощью Кармы , и он автоматически будет просматривать ваши файлы для изменений. Вы можете запускать тесты один раз через --watch=false или --single-run.

0

Похоже, вы хотите оставить autoWatch включенным, а также включить singleRun. Используйте --config для передачи отдельного файла конфигурации для тестирования. Это позволяет также не отображать хромированное окно, если все, о чем вы заботитесь, - это результаты, сохраняя при этом первоначальную конфигурацию, когда вы хотите отладить тест.

Внесите следующие изменения в конфигурационный файл и запустите npm run test:headless или ng test --config karma.conf.headless.js. Вы также можете использовать это в своей среде ci для запуска тестов в vm и регистрации результатов теста.

Добавить новые скрипты узлов для запуска ваших тестов без головы.

package.json:

{ 
... 
    "scripts": { 
    "ng": "ng", 
    "start": "ng serve", 
    "build": "ng build", 
    "test": "ng test", 
    "test:headless": "ng test --config karma.conf.headless.js", 
    "lint": "ng lint", 
    "e2e": "ng e2e", 
    "e2e:headless": "ng e2e --config protractor.conf.headless.js" 
    }, 
... 
} 

karma.conf.headless.js

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['jasmine', '@angular/cli'], 
    plugins: [ 
     require('karma-jasmine'), 
     require('karma-chrome-launcher'), 
     require('karma-jasmine-html-reporter'), 
     require('karma-coverage-istanbul-reporter'), 
     require('@angular/cli/plugins/karma') 
    ], 
    client:{ 
     clearContext: false // leave Jasmine Spec Runner output visible in browser 
    }, 
    coverageIstanbulReporter: { 
     reports: [ 'html', 'lcovonly' ], 
     fixWebpackSourcePaths: true 
    }, 
    angularCli: { 
     environment: 'dev' 
    }, 
    reporters: config.angularCli && config.angularCli.codeCoverage 
     ? ['progress', 'coverage-istanbul'] 
     : ['progress', 'kjhtml'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['ChromeHeadless'], 
    singleRun: true, 
    customLaunchers: { 
     ChromeHeadless: { 
      base: 'Chrome', 
      flags: [ 
       // See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md 
       '--headless', 
       '--disable-gpu', 
       // Without a remote debugging port, Google Chrome exits immediately. 
       '--remote-debugging-port=9222', 
      ] 
     } 
    } 
    }); 
}; 

Для полноты здесь транспортир конф а protractor.conf.headless.js

const { SpecReporter } = require('jasmine-spec-reporter'); 

exports.config = { 
    allScriptsTimeout: 11000, 
    specs: [ 
    './e2e/**/*.e2e-spec.ts' 
    ], 
    capabilities: { 
    'browserName': 'chrome', 
    chromeOptions: { 
     args: [ "--headless", "--disable-gpu", "--window-size=1280x720" ] 
    } 
    }, 
    directConnect: true, 
    baseUrl: 'http://localhost:4200/', 
    framework: 'jasmine', 
    jasmineNodeOpts: { 
    showColors: true, 
    defaultTimeoutInterval: 30000, 
    print: function() {} 
    }, 
    onPrepare() { 
    require('ts-node').register({ 
     project: 'e2e/tsconfig.e2e.json' 
    }); 
    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 
    } 
}; 
+0

Нет, мне неважно, так или иначе, о autowatch. Но, похоже, тест ng сделал! Я ненавижу работать без головы, потому что вы не можете установить точки останова таким образом. –

+0

Я не уверен, что тогда я понимаю вопрос. У меня есть 2 configs по умолчанию, когда я запускаю npm run test, который запускает тесты в chrome с включенным autowatch.Я использую это большую часть времени, поэтому я могу установить точки останова и отлаживать. Другой, когда я запускаю «npm run test: headless», который я использую в сборках CI, и когда я просто хочу увидеть результаты теста в консоли. Вы ищете что-то вроде запуска его в хроме, но не следите за изменениями? – majinnaibu

+0

Я думаю, что это была просто проблема с этой версией Angular-CLI. Используете ли вы тот же самый, который я использовал в ноябре? В соответствии с документами ниже, эта версия отключилась от командной строки, а не с конфигурационным файлом кармы. –