Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Karma&;调试JS单元测试;Intellij或Webstorm中的茉莉花_Javascript_Unit Testing_Intellij Idea_Jasmine_Karma Runner - Fatal编程技术网

Javascript 如何使用Karma&;调试JS单元测试;Intellij或Webstorm中的茉莉花

Javascript 如何使用Karma&;调试JS单元测试;Intellij或Webstorm中的茉莉花,javascript,unit-testing,intellij-idea,jasmine,karma-runner,Javascript,Unit Testing,Intellij Idea,Jasmine,Karma Runner,我试图调试用Jasmine编写并由Karma运行的JS单元测试。运行测试时,如何在Intellij中的测试中设置断点?如何执行单个测试 这是我的Intellij用于执行Karma测试的运行配置 下面是我的单元测试示例 import { RouterTestingModule } from '@angular/router/testing'; import { async, TestBed, ComponentFixture } from '@angular/co

我试图调试用Jasmine编写并由Karma运行的JS单元测试。运行测试时,如何在Intellij中的测试中设置断点?如何执行单个测试

这是我的Intellij用于执行Karma测试的运行配置

下面是我的单元测试示例

import {
    RouterTestingModule
} from '@angular/router/testing';
import {
    async,
    TestBed,
    ComponentFixture
} from '@angular/core/testing';
import { provideRoutes, Routes, RouterModule } from '@angular/router';
import { Component } from '@angular/core';

import { AppComponent } from './app.component';
import { NavbarComponent } from './shared/navbar/navbar.component';

@Component({
    selector: 'as-test-cmp',
    template: '<div class="title">Hello test</div>'
})
class TestRouterComponent {
}

let config: Routes = [
    {
        path: '', component: TestRouterComponent
    }
];

describe('AppComponent', () => {
    beforeEach(() => {
        TestBed.configureTestingModule({
            declarations: [
                TestRouterComponent,
                AppComponent,
                NavbarComponent
            ],
            imports: [ RouterTestingModule, RouterModule ],
            providers: [ provideRoutes(config) ]
        });
    });

    it('should have title Hello world', async(() => {
        TestBed.compileComponents().then(() => {
            let fixture: ComponentFixture<AppComponent>;
            fixture = TestBed.createComponent(AppComponent);
            fixture.detectChanges();

            let compiled = fixture.debugElement.nativeElement;
            expect(compiled).toBeDefined();
            // TODO: find a way to compile the routed component
            // expect(compiled.querySelector('div.title')).toMatch('Hello world');
        });
    }));
});

您可以在浏览器上调试。只需单击DEBUG按钮,找到您的类并在任何需要的地方添加断点。要再次运行它,只需刷新页面。

上述答案是正确的,但在此之前,您必须安装chrome扩展,然后您可以在WebStorm中调试。

我知道在执行Karma时如何执行。我希望能够在IDE中进行调试,就像在其他语言中调试一样。要执行单个测试,应该使用“fit”而不是“it”。目前这是唯一的方法,因为业力加载整个文件。如果你只想运行一个套件,那么你可以使用“fdescribe”。你知道怎么做吗?我面临着完全相同的问题,我尝试过的一切都不起作用。能做到这一点似乎是正常的期望。
module.exports = function (config) {
    var gulpConfig = require('../gulp/config')();

    /**
     * List of npm packages that imported via `import` syntax
     */
    var dependencies = [
        '@angular',
        'lodash',
        'rxjs',
        'moment'
    ];

    var configuration = {
        basePath: '../../',

        frameworks: ['jasmine'],
        browsers: ['PhantomJS'],
        reporters: ['progress', 'coverage'],

        preprocessors: {},

        // Generate json used for remap-istanbul
        coverageReporter: {
            dir: 'report/',
            reporters: [
                {type: 'json', subdir: 'report-json'}
            ]
        },

        files: [
            'node_modules/core-js/client/shim.min.js',
            'node_modules/zone.js/dist/zone.js',
            'node_modules/zone.js/dist/long-stack-trace-zone.js',
            'node_modules/zone.js/dist/proxy.js',
            'node_modules/zone.js/dist/sync-test.js',
            'node_modules/zone.js/dist/jasmine-patch.js',
            'node_modules/zone.js/dist/async-test.js',
            'node_modules/zone.js/dist/fake-async-test.js',
            'node_modules/systemjs/dist/system.src.js',
            'node_modules/moment/moment.js'
        ],

        // proxied base paths
        proxies: {
            // required for component assests fetched by Angular's compiler
            "/src/": "/base/src/",
            "/app/": "/base/src/app/",
            "/node_modules/": "/base/node_modules/"
        },

        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true
    };

    configuration.preprocessors[gulpConfig.tmpApp + '**/!(*.spec)+(.js)'] = ['coverage'];
    configuration.preprocessors[gulpConfig.tmpApp + '**/*.js'] = ['sourcemap'];
    configuration.preprocessors[gulpConfig.tmpTest + '**/*.js'] = ['sourcemap'];

    var files = [
        gulpConfig.tmpTest + 'test-helpers/global/**/*.js',
        gulpConfig.src + 'systemjs.conf.js',
        'config/test/karma-test-shim.js',
        createFilePattern(gulpConfig.tmpApp + '**/*.js', {included: false}),
        createFilePattern(gulpConfig.tmpTest + 'test-helpers/*.js', {included: false}),
        createFilePattern(gulpConfig.app + '**/*.html', {included: false}),
        createFilePattern(gulpConfig.app + '**/*.css', {included: false}),
        createFilePattern(gulpConfig.app + '**/*.ts', {included: false, watched: false}),
        createFilePattern(gulpConfig.tmpApp + '**/*.js.map', {included: false, watched: false})
    ];

    configuration.files = configuration.files.concat(files);

    dependencies.forEach(function (key) {
        configuration.files.push({
            pattern: 'node_modules/' + key + '/**/*.js',
            included: false,
            watched: false
        });
    });

    if (process.env.APPVEYOR) {
        configuration.browsers = ['IE'];
        configuration.singleRun = true;
        configuration.browserNoActivityTimeout = 90000; // Note: default value (10000) is not enough
    }

    config.set(configuration);

    // Helpers
    function createFilePattern(path, config) {
        config.pattern = path;
        return config;
    }
}
module.exports = function (config) {
    var gulpConfig = require('../gulp/config')();

    /**
     * List of npm packages that imported via `import` syntax
     */
    var dependencies = [
        '@angular',
        'lodash',
        'rxjs',
        'moment'
    ];

    var configuration = {
        basePath: '../../',

        frameworks: ['jasmine'],
        browsers: ['PhantomJS'],
        reporters: ['progress', 'coverage'],

        preprocessors: {},

        // Generate json used for remap-istanbul
        coverageReporter: {
            dir: 'report/',
            reporters: [
                {type: 'json', subdir: 'report-json'}
            ]
        },

        files: [
            'node_modules/core-js/client/shim.min.js',
            'node_modules/zone.js/dist/zone.js',
            'node_modules/zone.js/dist/long-stack-trace-zone.js',
            'node_modules/zone.js/dist/proxy.js',
            'node_modules/zone.js/dist/sync-test.js',
            'node_modules/zone.js/dist/jasmine-patch.js',
            'node_modules/zone.js/dist/async-test.js',
            'node_modules/zone.js/dist/fake-async-test.js',
            'node_modules/systemjs/dist/system.src.js',
            'node_modules/moment/moment.js'
        ],

        // proxied base paths
        proxies: {
            // required for component assests fetched by Angular's compiler
            "/src/": "/base/src/",
            "/app/": "/base/src/app/",
            "/node_modules/": "/base/node_modules/"
        },

        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true
    };

    configuration.preprocessors[gulpConfig.tmpApp + '**/!(*.spec)+(.js)'] = ['coverage'];
    configuration.preprocessors[gulpConfig.tmpApp + '**/*.js'] = ['sourcemap'];
    configuration.preprocessors[gulpConfig.tmpTest + '**/*.js'] = ['sourcemap'];

    var files = [
        gulpConfig.tmpTest + 'test-helpers/global/**/*.js',
        gulpConfig.src + 'systemjs.conf.js',
        'config/test/karma-test-shim.js',
        createFilePattern(gulpConfig.tmpApp + '**/*.js', {included: false}),
        createFilePattern(gulpConfig.tmpTest + 'test-helpers/*.js', {included: false}),
        createFilePattern(gulpConfig.app + '**/*.html', {included: false}),
        createFilePattern(gulpConfig.app + '**/*.css', {included: false}),
        createFilePattern(gulpConfig.app + '**/*.ts', {included: false, watched: false}),
        createFilePattern(gulpConfig.tmpApp + '**/*.js.map', {included: false, watched: false})
    ];

    configuration.files = configuration.files.concat(files);

    dependencies.forEach(function (key) {
        configuration.files.push({
            pattern: 'node_modules/' + key + '/**/*.js',
            included: false,
            watched: false
        });
    });

    if (process.env.APPVEYOR) {
        configuration.browsers = ['IE'];
        configuration.singleRun = true;
        configuration.browserNoActivityTimeout = 90000; // Note: default value (10000) is not enough
    }

    config.set(configuration);

    // Helpers
    function createFilePattern(path, config) {
        config.pattern = path;
        return config;
    }
}