我有一个简单的需求:在Angular CLI项目(Angular v6)的Jasmine单元测试中使用自己的自定义匹配器。 几个限制:
types
而构建一个npm模块。到目前为止,我能分辨出的是我需要一个.d.ts文件,所以这是我的matchers.d.ts:
/// <reference path="../../../node_modules/@types/jasmine/index.d.ts" />
declare namespace jasmine {
interface Matchers<T> {
toContainPath(path: string): boolean;
}
}
在同一目录中,我有matchers.ts文件:
export const customMatchers: jasmine.CustomMatcherFactories = {
// Affirms the element contains a sub-element at the given CSS path.
toContainPath: function (_util, _customEqualityTesters) {
return {
compare: function (element: HTMLElement, path: string) {
const result = {
pass: false,
message: ''
};
if (!element) {
result.message = 'Expected element to be non-empty';
} else if (!path) {
result.message = 'Expected path to be non-empty';
} else {
result.pass = element.querySelector(path) !== null;
result.message =
'Expected ' + element + (result.pass ? ' not' : '') + ' to contain ' + path;
}
return result;
}
};
}
};
在我的测试(规格)文件中,我有:
import { customMatchers } from 'app/testing/matchers';
. . .
/// <reference path="../../../testing/matchers.d.ts" />
. . .
beforeEach(() => {
jasmine.addMatchers(customMatchers);
. . .
最后,我在包含的测试中使用匹配器,例如:
expect(element).toContainPath('my-sidebar');
我还尝试将matchers.d.ts的完整路径添加到tsconfig.spec.json中的types
数组中。
A,我无法找到有效的解决方案。失败继续表现为
error TS2339: Property 'toContainPath' does not exist on type 'Matchers<HTMLElement>'
我看过的有希望的地方,但无济于事:
有人可以提供秘密调味料吗?
答案 0 :(得分:0)
这两个答案加起来对我有用!
Create custom jasmine matcher using Typescript
在测试文件夹中添加了index.ts,并使.ts和.d.ts文件具有不同的名称(例如custom-matchers.ts和matchers-types.d.ts)。