如何添加 Jasmine 自定义匹配器 Typescript 定义?
Posted
技术标签:
【中文标题】如何添加 Jasmine 自定义匹配器 Typescript 定义?【英文标题】:How do I add a Jasmine custom matcher Typescript definition? 【发布时间】:2017-10-02 22:18:18 【问题描述】:我一直是lookingaround,这个问题似乎是recurring thing。但是,我发现的解决方案似乎都不适合我。
使用以下内容:
"typescript": "2.3.2",
"jasmine-core": "2.6.1",
"@types/jasmine": "2.5.47"
我无法让 Typescript 合并包含我的自定义匹配器定义的命名空间声明。
添加这个:
declare namespace jasmine
interface Matchers<T>
toBeAnyOf(expected: jasmine.Expected<T>, expectationFailOutput?: any): boolean;
隐藏之前在jasmine
上声明的所有其他类型。编译器输出错误如:
[ts] Namespace 'jasmine' has no exported member 'CustomMatcherFactories'
[ts] Namespace 'jasmine' has no exported member 'CustomMatcher'.
有没有合适的方法来添加自定义匹配器并使其与 Typescript 很好地配合?
如果您使用的是tslint:recommended
规则集,tslint
会出现额外问题。这些规则不允许使用 namespace
或 module
关键字,所以我必须禁用 linter(或更改 "no-namespace"
规则)才能尝试这一点。如果“不推荐”,不确定如何绕过扩展定义。
【问题讨论】:
下面的答案最终解决了您的问题 Nicolas 还是您做了其他事情? @hornairs 这发生在不久前,但我似乎记得它没有。最后,我放弃了并使用已经可用的匹配器重新编写了我的测试。 【参考方案1】:当我添加自定义匹配器时,我不得不修改三个文件。我创建了一个名为 matchers.ts 的文件,其中包含实际的匹配器。然后,我为我的 matchers.ts 文件添加了对 test.ts 的导入。最后,我在包含匹配器的 typings.d.ts 文件中添加了一个接口。
matchers.ts(任意名称)
beforeEach(() =>
jasmine.addMatchers(
toContainText: () =>
return
compare: (actual: htmlElement, expectedText: string, customMessage?: string) =>
const actualText = actual.textContent;
return
pass: actualText.indexOf(expectedText) > -1,
get message()
let failureMessage = 'Expected ' + actualText + ' to contain ' + expectedText;
if (customMessage)
failureMessage = ' ' + customMessage;
return failureMessage;
;
;
,
);
);
test.ts
import 'test/test-helpers/global/matchers'; (my relative filepath)
typings.d.ts
declare module jasmine
interface Matchers
toContainText(text: string, message?: string): boolean;
【讨论】:
'declare' 语句可以完美地卡在 spec.ts 文件中。 我还必须在测试文件中添加三斜杠指令以消除消息:TS2339: Property 'toContainText' does not exist on type 'Matchers///<reference path="./typings.d.ts"/>
并将泛型类型添加到 Matchers
: Matchers 以上是关于如何添加 Jasmine 自定义匹配器 Typescript 定义?的主要内容,如果未能解决你的问题,请参考以下文章
jasmine-karma 中的模块“DynamicTestModule”导入的意外值“未定义”
如何让 TypeScript 知道自定义 Jest 匹配器?