Ответ 1
Для меня я сделал следующее:
Установить типы
npm install typings --global
Затем добавьте типизацию для жасмина
typings install dt~jasmine --save --global
Я пытаюсь получить unit test, написанный в Typescript, используя Jasmine для компиляции. В моем модульном тестовом файле Resharper предлагает мне ссылку для импорта типов из jasmine.d.ts.
/// <reference path="sut.ts" />
/// <reference path="../../../scripts/typings/jasmine/jasmine.d.ts" />
describe("Person FullName", function () {
var person;
BeforeEach(function () {
person = new Person();
person.setFirstName("Joe");
person.setLastName("Smith");
});
It("should concatenate first and last names", function () {
Expect(person.getFullName()).toBe("Joe, Smith");
});
});
Итак, я нажимаю на ссылку и заканчиваю следующим (на самом деле resharper только префикс функции описания с помощью "Жасмин", поэтому я вручную префикс других вызовов Жасмин):
/// <reference path="sut.ts" />
/// <reference path="../../../scripts/typings/jasmine/jasmine.d.ts" />
import Jasmine = require("../../../Scripts/typings/jasmine/jasmine");
Jasmine.describe("Person FullName", function () {
var person;
Jasmine.BeforeEach(function () {
person = new Person();
person.setFirstName("Joe");
person.setLastName("Smith");
});
Jasmine.It("should concatenate first and last names", function () {
Jasmine.Expect(person.getFullName()).toBe("Joe, Smith");
});
});
Однако оператор import имеет красную строку с ошибкой с сообщением об ошибке "Невозможно разрешить внешний модуль.. /../../scripts/typings/jasmine/jasmine. Модуль не может быть псевдонимом для немодульного типа"
Любая идея, что вызывает эту ошибку? Я проверил, что опция "Модульная система" установлена в AMD в моих настройках сборки проекта. Я также проверил, что модуль жасмина определен в jasmine.d.ts. Я загрузил этот файл с сайта DefinitelyTyped.
declare module jasmine {
...
}
Для меня я сделал следующее:
Установить типы
npm install typings --global
Затем добавьте типизацию для жасмина
typings install dt~jasmine --save --global
Поместите это вверху вашего спецификационного файла typescript:
/// <reference path="../../node_modules/@types/jasmine/index.d.ts" />
let Jasmine = require('jasmine');
Для этого необходимо установить следующие модули Jasmine:
$ npm install jasmine-core jasmine @types/jasmine jasmine-ts --save-dev
Как только вы это сделаете, IDE (например, WebStorm) распознает Jasmine и его функции, такие как describe(), it() и expect(). Поэтому вам не нужно префикс их "Жасмин". " Кроме того, вы можете запускать ваши файлы spec из командной строки с помощью модуля jasmine-ts. Установите эти инструменты командной строки глобально:
$ npm install -g jasmine jasmine-ts
Затем настройте модуль командной строки "жасмин", чтобы Jasmine мог найти свой файл конфигурации. Затем вы можете запустить jasmine-ts, и ваш файл спецификации должен отлично работать из командной строки:
./node_modules/.bin/jasmine-ts src/something.spec.ts
.. и вы можете настроить свою среду IDE для ее запуска так же, как и для отладки, этот путь также должен работать (работает для меня).
Написав ваши тесты таким образом, вы можете запустить спецификацию теста Jasmine на стороне сервера без кармы или запустить ее в веб-браузере с использованием Karma. Тот же typescript код.
Включите это в свой hasm файл jasmine,...
<script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine.js"></script>
... или установите пакет жасмина npm:
npm install --save-dev jasmine
когда вы используете второй способ (жасмин как модуль), вы должны его импортировать:
var jasmine = require('jasmine');
или
import jasmine from 'jasmine';
затем измените другой код:
jasmine.describe("Person FullName", function () {
var person;
jasmine.beforeEach(function () {
person = new Person();
person.setFirstName("Joe");
person.setLastName("Smith");
});
jasmine.it("should concatenate first and last names", function () {
jasmine.expect(person.getFullName()).toBe("Joe, Smith");
});
});
Лично я предпочел бы первый способ, не используя модуль жасмина npm. (Я еще не тестировал модуль)
По какой-то причине это никогда не отвечали должным образом, но, конечно, все изменилось, но здесь не существует современного ответа, я пришел сюда через Google, потому что я ленив и иногда отрывки Google.
В случае, если вы столкнулись с этой проблемой, убедитесь, что у вас есть @typings/jasmine
, установленный как devDependency, и ваш tsConfig содержит типизации в include, например.
"include": ["typings/**/*.d.ts"]