Я устанавливаю все мои файлы тестов в другой каталог, в котором находятся файлы src
, тесты будут иметь такую же структуру файлов, что и src
, но единственное отличие состоит в том, что они находятся вбазовая папка, которая является тестом. Я подумала, что просто изменив настройки теста angular.json
и переместив файлы теста конфигурации в другой каталог, можно сделать это, но похоже, что никакие тестовые файлы не обнаруживаются тестами кармы.
Для проверки, все ли в порядке, я сделал только один тест
#src
src/webapp/app/pipes/
- time.ts
#test
test/webapp/
- karma.conf.js
- tsconfig.spec.json
- test.ts
test/webapp/pipes/
- time.ts
Раздел теста в angular.json
настроен так:
{
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "test/webapp/test.ts",
"polyfills": "src/webapp/polyfills.ts",
"tsConfig": "test/webapp/tsconfig.spec.json",
"karmaConfig": "test/webapp/karma.conf.js",
"styles": [
"src/webapp/styles.css"
],
"scripts": [],
"assets": [
"src/webapp/favicon.ico",
"src/webapp/assets"
]
}
}
karma.conf.js
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../coverage'),
reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
};
tsconfig.spec.json
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"test.ts",
"../../src/webapp/polyfills.ts"
],
"include": [
"**/*.ts",
"**/*.d.ts"
]
}
test.ts
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context = require.context('./', true /\.ts$/);
// And load the modules.
context.keys().map(context);
Я думаю, что все хорошо, но я не знаю, почему это не такt не обнаруживает файлы в каталоге test, консоль не отображает предупреждение или что-то, что может указывать причину этой проблемы, и бегун всегда показывает Executed 0 of 0 ERROR (0.012 secs / 0 secs)
Ни один из других вопросов, которые я нашел, не былполезно .. я действительноВы не хотите следовать структуре спецификации по умолчанию, которая помещает тест в ту же директорию, где находится файл src. На всякий случай, если это может потребоваться, я также помещу содержимое файла теста
test / webapp / app / pipe / time.ts
import { TimePipe } from "../../../../src/webapp/app/pipes/time";
describe("Time pipe test", () => {
let Time;
beforeEach(() => {
Time = new TimePipe();
});
it("should correctly show minutes and seconds in a time value", () => {
const data = 74;
const expected = "01:14";
expect(Time.transform(data)).toBe(expected);
});
});