Я слежу за этим уроком от angular.io
Как они сказали, я создал файл hero.spec.ts для создания юнит-тестов:
import { Hero } from './hero';
describe('Hero', () => {
it('has name', () => {
let hero: Hero = {id: 1, name: 'Super Cat'};
expect(hero.name).toEqual('Super Cat');
});
it('has id', () => {
let hero: Hero = {id: 1, name: 'Super Cat'};
expect(hero.id).toEqual(1);
});
});
Модульные тесты работают как шарм. Проблема: я вижу некоторые ошибки, которые упоминаются в учебнике:
Наш редактор и компилятор могут жаловаться, что они не знают, что
it
иexpect
как, потому что им не хватает печатных файлов, которые описывают Jasmine. Мы можем пока игнорировать эти раздражающие жалобы, поскольку они безвредны.
И они действительно проигнорировали это. Несмотря на то, что эти ошибки безвредны, я не выгляжу хорошо в моей выходной консоли, когда получаю кучу таких ошибок.
Пример того, что я получаю:
Не могу найти название «описать».
Не могу найти имя 'оно'.
Не могу найти имя «ожидаю».
Что я могу сделать, чтобы это исправить?
unit-testing
angular
typescript
jasmine
Piotrek
источник
источник
Ответы:
Я надеюсь, что вы установили -
Затем поместите следующий импорт в верхней части
hero.spec.ts
файла -Это должно решить проблему.
источник
@types/jasmine@2.5.41
. В противном случае вы можете увидеть эти ошибки компиляции .import 'jasmine';
import {} from 'jasmine';
самом деле делает? Это так же, какimport 'jasmine'
?С Typescript@2.0 или новее вы можете устанавливать типы с:
Затем импортируйте типы автоматически, используя
types
опцию вtsconfig.json
:Это решение не требуется
import {} from 'jasmine';
в каждом файле спецификации.источник
"types": ["jasmine"]
строку больше. «По умолчанию все видимые« @types »пакеты включены в вашу компиляцию. Пакеты в node_modules / @ types любой вложенной папки считаются видимыми, в частности, это означает, что пакеты внутри ./node_modules/@types/, ../node_modules/@ типов /, ../../node_modules/@types/ и т. д. "node
иjasmine
типы не обнаружены. По крайней мере, это не работает для меня, и я использую Typescript@2.1.5ang-app/e2e/tsconfig.json
. Я пробовал его на каждом уровне json . Не могли бы вы добавить более подробную информацию?Как уже упоминалось в некоторых комментариях,
"types": ["jasmine"]
он больше не нужен, все@types
пакеты автоматически включаются в компиляцию (начиная с версии 2.1, я думаю).На мой взгляд, самое простое решение - исключить тестовые файлы в вашем файле tsconfig.json, например:
Это работает для меня.
Дополнительная информация в официальных документах tsconfig .
источник
src/tsconfig.app.json
,src/tsconfig.spec.json
иtsconfig.json
. Упомянутый раздел «исключить» является частью первого."types": [ "jasmine" ]
часть вторая.exclude
блока.exclude
блока tsconfig . Затем я создал новыйtsconfig.build.json
файл с шаблоном spec-файла, добавленным вexclude
блок. Теперь в моихts-loader
настройках (в webpack.config) я используюtsconfig.build.json
. В этих конфигурациях модули разрешаются в тестовых файлах, и при создании сборки или запуске сервера тестовые файлы исключаются.Вам нужно установить набор текста для Жасмин. Предполагая, что вы пользуетесь относительно свежей версией машинописного текста 2, вы должны сделать следующее:
источник
С Typescript@2.0 или новее вы можете устанавливать типы с помощью npm install
затем импортировать типы автоматически с помощью typeRoots опции в tsconfig.json.
Это решение не требует импорта {} из 'Жасмин'; в каждом файле спецификации.
источник
Решение этой проблемы связано с тем, что @Pace написал в своем ответе. Однако, это не все объясняет, поэтому, если вы не возражаете, я напишу это сам.
РЕШЕНИЕ:
Добавление этой строки:
в начале
hero.spec.ts
файла исправляет проблему. Путь ведет кtypings
папке (где хранятся все наборы).Чтобы установить набор текста, вам нужно создать
typings.json
файл в корне вашего проекта со следующим содержимым:И запустить
typings install
(гдеtypings
находится пакет NPM).источник
В моем случае решение было удалить по
typeRoots
моемуtsconfig.json
.Как вы можете прочитать в документе TypeScript
источник
Я в курсе последних событий на сегодняшний день и нашел лучший способ решить эту проблему - ничего не делать ...
typeRoots
нет,types
нет,exclude
нет,include
все настройки по умолчанию, кажется, работают просто отлично. На самом деле это не сработало для меня, пока я не удалил их все. Я имел:но это по умолчанию, поэтому я удалил это.
Я имел:
чтобы пройти какое-то предупреждение компилятора. Но теперь я тоже это убрал.
Предупреждение, которое не должно быть:
error TS2304: Cannot find name 'AsyncIterable'.
отnode_modules\@types\graphql\subscription\subscribe.d.ts
что очень неприятно, поэтому я сделал это в tsconfig, чтобы он загружался:
так как он в наборе esnext. Я не использую его напрямую, поэтому пока не стоит беспокоиться о совместимости. Надеюсь, это не сожжет меня позже.
источник
"types": ["node"]
вtsconfig.json
но вы должны добавить этот тип вtsconfig.app.json
! Вы не должны иметь это предупреждение снова, я думаю. Вы могли бы сохранить"target": "es5"
или"target": "es6"
сейчас.Нужно было только сделать следующее, чтобы забрать @types в Lerna Mono-repo, где существует несколько узлов node_modules.
Затем в каждом файле tsconfig.file каждого модуля или приложения.
источник
Чтобы компилятор TypeScript использовал все видимые определения типов во время компиляции,
types
опция должна быть полностью удалена изcompilerOptions
поля вtsconfig.json
файле.Эта проблема возникает, когда
types
вcompilerOptions
поле есть некоторые записи , где в то же времяjest
отсутствует запись.Таким образом, чтобы решить проблему,
compilerOptions
поле в вашем полеtscongfig.json
должно быть либо включеноjest
вtypes
область, либо полностьюtypes
исключено:источник
google map types
вtypes
варианте. После полного удаления опции все заработало нормально.Я просто добавлю Ответ для того, что работает для меня в "typcript": "3.2.4" Я понял, что у jasmine в node_modules / @ types есть папка для ts3.1 под типом jasmine, так что вот шаги: -
npm install -D @types/jasmine
Добавить в tsconfig.json Жасмин / ts3.1
"typeRoots": [ ... "./node_modules/jasmine/ts3.1" ],
Добавить жасмин к типам
"types": [ "jasmine", "node" ],
Примечание: в этом
import 'jasmine';
большенет необходимости.источник
В моем случае я получал эту ошибку при обслуживании приложения, а не при тестировании. Я не знал, что у меня был другой параметр конфигурации в моем файле tsconfig.app.json.
У меня ранее было это:
Он включал все мои
.spec.ts
файлы при обслуживании приложения. Я изменилinclude property to
exclude` и добавил регулярное выражение, чтобы исключить все тестовые файлы, например:Теперь все работает как положено.
источник
Посмотрите на импорт, возможно, у вас есть зависимость цикла , в моем случае это была ошибка, использование
import {} from 'jasmine';
исправит ошибки в консоли и сделает код компилируемым, но не удалит корень дьявола (в моем случае зависимость цикла).источник
Я на Angular 6, Typescript 2.7, и я использую Jest Framework для модульного тестирования. Я
@types/jest
установил и добавилtypeRoots
внутриtsconfig.json
Но все равно есть ошибка дисплея ниже (то есть: на терминале нет ошибок)
И добавление импорта:
технически ничего не делает, поэтому я подумал, что где-то есть импорт, вызывающий эту проблему, то я обнаружил, что если удалить файл
в
src/
папке, решил проблему для меня. Поскольку @types импортируется раньше внутри rootTypes.Я рекомендую вам сделать то же самое и удалить этот файл, никакой необходимой конфигурации внутри. (пс: если вы в том же деле, что и я)
источник
если ошибка в файле .specs app / app.component.spec.ts (7,3): ошибка TS2304: невозможно найти имя beforeEach.
добавьте это в начало вашего файла и npm установите rxjs
import {range} из 'rxjs'; import {map, filter} из 'rxjs / operator';
источник