我试图使用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");
});
});
字符串
所以我点击链接,最后得到以下结果(实际上,resharper只给describe函数加上了“Jasmine."前缀,所以我手动给其他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");
});
});
型
但是,导入语句有一条红色的波浪线,并显示错误消息“无法解析外部模块../scripts/typings/jasmine/jasmine。模块不能别名为非模块类型”。
任何想法是什么导致这个错误?我已经检查了“模块系统”选项设置为AMD在我的项目构建设置.我还检查了茉莉花模块定义在jasmine. d. ts.我下载了这个文件从martelyTyped网站.
declare module jasmine {
...
}
型
9条答案
按热度按时间ljsrvy3e1#
以下是(在我看来)截至2018年测试
ts-node
应用程序的最佳方法:字符串
在
package.json
中:型
在
jasmine.json
中,将文件模式更改为*.ts
型
在spec文件中:
型
要运行测试,请执行以下操作:
型
这将使用本地安装的
ts-node
和jasmine
版本。这比使用全局安装的版本更好,因为使用本地版本,您可以确保每个人都使用相同的版本。注意:如果你有一个Web应用程序而不是节点应用程序,你可能应该使用Karma而不是Jasmine CLI来运行测试。
dffbzjpn2#
把它放在你的typescript spec文件的顶部:
字符串
您必须安装以下Jasmine模块才能正常工作:
型
完成此操作后,IDE(如WebStorm)将识别Jasmine及其函数,如describe()、it()和expect()。因此,您不需要在它们前面加上“Jasmine”前缀。此外,您可以使用jasmine-ts模块从命令行运行spec文件。全局安装以下命令行工具:
型
然后配置“jasmine”命令行模块,以便Jasmine可以找到它的配置文件。然后您应该能够运行jasmine-ts,并且您的spec文件应该可以从命令行正常运行:
型
..而且,你也可以配置你的IDE来运行它,这样运行调试也应该可以(对我来说很有效)。
以这种方式编写测试,您可以在服务器端运行Jasmine测试规范而无需Karma,也可以使用Karma在Web浏览器中运行它。相同的类型脚本代码。
cwtwac6a3#
如果您有导入问题,请使用
tsconfig-paths
字符串
运行启用了类型脚本的jasmine:
型
确保您的jasmine将搜索.ts文件:
型
要测试脚本,如果在项目中使用了polyfill,可能还需要使用它们。
型
rggaifut4#
对我来说,我做了以下事情:
安装类型
字符串
然后把jasmine的打字加进去
型
ogq8wdun5#
你可以尝试一个side-effect only import,它引入了
@types/jasmine
声明,并将jasmine函数置于全局作用域中,这样你就不需要在每个调用之前加上jasmine.
,从而允许从现有的单元测试中快速移植,并且仍然可以很好地使用webpack。字符串
当然,你仍然需要安装jasmine和打字:
型
但是不需要专门的jasmine加载器来加载ts或node。只需对编译后的js文件运行jasmine即可:
型
假设你的打字脚本文件在一个编译为
bin/test
的“测试”脚本中,你有一个test/support/jasmine.json
,它类似于:型
P.S.所有上述作品在Windows太
pcrecxhr6#
包括这到您的茉莉html文件,.
字符串
.或者安装npm jasmine包:
型
当你使用第二种方式(jasmine作为模块)时,你必须导入它:
型
或
型
然后更改另一个代码:
型
就我个人而言,我更喜欢第一种方式,而不使用jasmine npm模块。(我还没有测试该模块)
wlp8pajw7#
你并没有要求这样做,但是为了加分:一旦你得到了AJ的答案并运行(使用
ts-node
调用Jasmine启动脚本),你就可以添加一个新任务:字符串
当然,如果你愿意的话,你可以使用Jasmine的配置文件来传递你的specs或者其他参数。现在,Jasmine会运行你所有的specs一次,然后
ts-node-dev
会在后台等待你的测试或者任何他们可能需要require
修改的东西。我还没有找到一种方法来只运行已经改变的测试(或者导入已经改变的测试)--据我所知,那就是not supported anyway;hxzsmxv28#
我的文件夹结构
Spec文件夹位于项目的根目录下
字符串
文件内容
ts-console.ts
型
jasmine.json**
型
package.json中有额外的脚本
型
并将行“/spec/dist”添加到**.gitignore**
运行您的测试!
使用
npm test
运行测试。它是如何工作的?
1.已清理测试目录。
1.测试被编译到spec/dist文件夹到JS。
1.测试从此位置运行。
jmo0nnb39#
投票最高的答案是90%,但它忽略了一个可能影响您的关键细节:它假设您的
tsconfig.json
“模块”设置为“CommonJS”。如果您有其他东西,如"module": "ES2020"
或"module": "ESNext"
,您将在半天内与import
和require
错误打地鼠。你不需要改变整个项目的“模块”值来克服这些错误,你可以设置一个node-ts覆盖。这样,当node-ts运行时,项目将只为
"module": "CommonJS"
。有多种方法可以做到这一点,但我通过将以下内容添加到tsconfig.json
文件的底部来实现:字符串
无论如何,在设置jasmine和typescript方面有很多辛苦学习的问题,我认为值得分享一个 * 整个 * 工作项目。You can browse/clone it on github,我将在下面分享摘录:
项目结构
型
./package.json
型
./spec/support/jasmine.json
型
./spec/support/logger.js
型
./spec/support/slow-spec-footer.js
型
./spec/support/type-check.js
型
./tsv.json
型
./tsv.src.json
型
./tsv.test.json
型
./src/index.spec.ts
型
./src/index.ts