aw1*_*975 42 javascript unit-testing jasmine chutzpah typescript
我正在尝试使用Jasmine编写一个用Typescript编写的单元测试.在我的单元测试文件中有以下内容,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");
});
});
Run Code Online (Sandbox Code Playgroud)
所以我点击链接并最终得到以下内容(实际上resharper只用"Jasmine."前缀了describe函数,所以我手动为其他Jasmine调用做了前缀):
/// <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");
});
});
Run Code Online (Sandbox Code Playgroud)
但是import语句有一条红色波浪线,错误信息"无法解析外部模块../../../scripts/typings/jasmine/jasmine.模块不能别名为非模块类型"
知道是什么导致了这个错误吗?我已经检查过"模块系统"选项在我的项目构建设置中设置为AMD.我还检查过jasmine模块是在jasmine.d.ts中定义的.我从DefinitelyTyped网站下载了这个文件.
declare module jasmine {
...
}
Run Code Online (Sandbox Code Playgroud)
AJ *_*son 45
这是(在我看来)ts-node截至2018年测试应用程序的最佳方式:
npm install --save-dev jasmine @types/jasmine ts-node
Run Code Online (Sandbox Code Playgroud)
在package.json:
{
"scripts": {
"test": "ts-node node_modules/jasmine/bin/jasmine"
}
}
Run Code Online (Sandbox Code Playgroud)
在您的spec文件中:
import "jasmine";
import something from "../src/something";
describe("something", () => {
it("should work", () => {
expect(something.works()).toBe(true);
});
});
Run Code Online (Sandbox Code Playgroud)
要运行测试:
npm test
Run Code Online (Sandbox Code Playgroud)
这将使用本地安装的ts-node和版本jasmine.这比使用全局安装的版本更好,因为对于本地版本,您可以确保每个人都使用相同的版本.
注意:如果您有一个Web应用程序而不是节点应用程序,您应该使用Karma而不是Jasmine CLI运行测试.
把它放在打字稿spec文件的顶部:
/// <reference path="../../node_modules/@types/jasmine/index.d.ts" />
let Jasmine = require('jasmine');
Run Code Online (Sandbox Code Playgroud)
您必须安装以下Jasmine模块才能工作:
$ npm install jasmine-core jasmine @types/jasmine jasmine-ts --save-dev
Run Code Online (Sandbox Code Playgroud)
一旦你这样做,IDE(如WebStorm)将识别Jasmine及其功能,如describe(),it()和expect()..所以你不需要用"Jasmine"作为前缀.此外,您可以使用jasmine-ts模块从命令行运行spec文件.全局安装这些命令行工具:
$ npm install -g jasmine jasmine-ts
Run Code Online (Sandbox Code Playgroud)
然后配置"jasmine"命令行模块,以便Jasmine可以找到其配置文件.然后你应该能够运行jasmine-ts并且你的spec文件应该从命令行运行正常:
./node_modules/.bin/jasmine-ts src/something.spec.ts
Run Code Online (Sandbox Code Playgroud)
..并且,您可以将IDE配置为像这样运行它,并且调试运行方式也适用(适用于我).
以这种方式编写测试,您可以在没有Karma的情况下在服务器端运行Jasmine测试规范,或者使用Karma在Web浏览器中运行它.相同的打字稿代码.
对我来说,我做了以下事情:
安装打字
npm install typings --global
Run Code Online (Sandbox Code Playgroud)
然后添加茉莉花的打字
typings install dt~jasmine --save --global
Run Code Online (Sandbox Code Playgroud)
如果您遇到导入问题,请使用tsconfig-paths
npm i ts-node tsconfig-paths types/jasmine jasmine --save-dev
Run Code Online (Sandbox Code Playgroud)
运行启用打字稿的 jasmine:
ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine.js
Run Code Online (Sandbox Code Playgroud)
确保您的 jasmine 将搜索 .ts 文件:
"spec_files": [
"**/*[sS]pec.ts"
],
"helpers": [
"helpers/**/*.ts"
],
Run Code Online (Sandbox Code Playgroud)
为了测试你的脚本,如果你在项目中使用它们,你可能还需要填充。创建一个包含所需导入的帮助文件,例如helpers/global/polifill.ts
import 'core-js';
Run Code Online (Sandbox Code Playgroud)
将此包含到您的 jasmine html 文件中,...
<script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine.js"></script>
Run Code Online (Sandbox Code Playgroud)
...或者安装 npm jasmine 包:
npm install --save-dev jasmine
Run Code Online (Sandbox Code Playgroud)
当您使用第二种方式(茉莉花作为模块)时,您必须导入它:
var jasmine = require('jasmine');
Run Code Online (Sandbox Code Playgroud)
或者
import jasmine from 'jasmine';
Run Code Online (Sandbox Code Playgroud)
然后更改其他代码:
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");
});
});
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我更喜欢第一种方式,而不使用 jasmine npm 模块。(我还没有测试该模块)
| 归档时间: |
|
| 查看次数: |
52032 次 |
| 最近记录: |