karma-typcript: скомпилированное имя файла, добавляемое в качестве источника в inline sourcemap - PullRequest
0 голосов
/ 16 сентября 2018

Я новичок во всем этом тестировании, так что, может быть, я чего-то не понимаю, но мой проект настроен на карму, мокко, машинопись.

Кажется, все работает отлично, пока я не вхожу в инструменты разработки Chrome и не перебираю свой код. На вкладке источников я вижу папку src и файлы в моем тестовом проекте:

Chrome Source Tab

Для моего spec-файла я вижу две записи: скомпилированный js, а затем исходный ts, полученный из информации исходной карты в js-файле. В моем исходном файле спецификации я импортирую класс TestClass.ts. Этот файл указан три раза: скомпилированный файл js и версия ts, но также и другой файл js с тем же именем. TestClass.ts и второй TestClass.js являются производными от исходной карты, встроенной в первый TestClass.js.

==> Проблема в том, что, когда я перебираю код и он попадает в TestClass, он переключается между отображенными TestClass.ts и TestClass.js. Это не останется только в ТС.

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

sample.spec.ts:

import { expect } from "chai";
import { describe, it } from "mocha";

import TestClass from "./TestClass";

describe("Test A", function() {
    it("should pass", function(){
        expect(TestClass.getString()).to.be.a("string");
    });
});

TestClass.ts:

export default class TestClass {
    static getString () {
        return "This is a string";
    }
}

karma.conf.js:

module.exports = function(config) {
  config.set({
    basePath: "",
    frameworks: ["mocha", "chai", "sinon", "karma-typescript"],
    files: [
      "src/sample.spec.ts",
      "src/TestClass.ts"
    ],
    exclude:[
      "scr/**.*.js"
    ],
    preprocessors: {
      "**/*.ts": "karma-typescript" // *.tsx for React Jsx
    },
    reporters: ["karma-typescript","progress", "mocha"],
    port: 9876,
    colors: true,
    logLevel: config.LOG_DEBUG,
    autoWatch: true,
    browsers: ["ChromeDebug"],
    customLaunchers: {
      ChromeDebug: {
        base: "Chrome",
        flags: ["--remote-debugging-port=9333"],
        smartStep: true
      }
    },
    singleRun: false,
    karmaTypescriptConfig: {
        tsconfig: "./tsconfig.test.json"
    },
  })
}

tsconfig.test.json:

{
  "compileOnSave": false,
  "compilerOptions": {
    "noImplicitAny": true,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "lib": ["es2015"],
    "module": "commonjs",
    "moduleResolution": "node",
    "alwaysStrict": true,
    "allowSyntheticDefaultImports": true,
    "resolveJsonModule": true,
  },
  "exclude": [
    "node_modules",
    "buildtasks",
    "build",
    "tasks",
    "docs"
  ]
}

package.json:

{
    "name": "test",
    "version": "1.0.0-alpha.1",
    "description": "This is a test.",
    "dependencies": {},
    "devDependencies": {
        "@types/bluebird": "^3.5.24",
        "@types/chai": "^4.1.4",
        "@types/karma": "^1.7.6",
        "@types/mocha": "^5.2.5",
        "@types/sinon": "^5.0.2",
        "chai": "^4.1.2",
        "karma": "^3.0.0",
        "karma-chai": "^0.1.0",
        "karma-chrome-launcher": "^2.2.0",
        "karma-mocha": "^1.3.0",
        "karma-mocha-reporter": "^2.2.5",
        "karma-sinon": "^1.0.5",
        "karma-typescript": "^3.0.13",
        "mocha": "^5.2.0",
        "sinon": "^6.3.3",
        "typescript": "^3.0.3"
    },
    "scripts": {
        "karma:dev.test": "karma start karma.conf.js"
    }
}

Я пытался понять это уже пару дней. Сводит меня с ума!

Спасибо!

...