- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 angular2 项目上使用 jasmine,在为测试编写自定义匹配器时遇到了一些问题。我希望能够比较两个相对复杂的对象。我找到了 this article它声称可以解决问题,但它只会导致 typescript 错误,指出它无法识别 jasmine 的 Matchers
对象上的新方法。相关代码是这样的:
declare module jasmine {
interface Matchers {
toBeNumeric(): void;
}
}
Another article给出了一个类似但略有不同的解决方案,该解决方案给出了相同的错误。
declare namespace jasmine {
interface Matchers {
toHaveText(expected: string): boolean;
}
}
我试过了
let m: jasmine.Matchers = expect(someSpy.someMethod).toHaveBeenCalled();
得到这个错误:
Type 'jasmine.Matchers' is not assignable to type 'jasmine.Matchers'. Two different types with this name exist, but they are unrelated.
这似乎表明 declare namespace jasmine
语句正在创建一个新的 jasmine
命名空间,而不是扩展现有的命名空间。
那么我怎样才能创建我自己的 typescript 会满意的匹配器呢?
最佳答案
Daf 的回答大部分对我有用我只是注意到他的示例代码和他命名文件的方式存在问题。我还遇到了另一个不相关的问题。因此有了新的答案。
匹配器 - custom-matchers.ts
import MatchersUtil = jasmine.MatchersUtil;
import CustomMatcherFactories = jasmine.CustomMatcherFactories;
import CustomEqualityTester = jasmine.CustomEqualityTester;
import CustomMatcher = jasmine.CustomMatcher;
import CustomMatcherResult = jasmine.CustomMatcherResult;
export const SomeCustomMatchers: CustomMatcherFactories = {
toReallyEqual: function (util: MatchersUtil, customEqualityTester: CustomEqualityTester[]): CustomMatcher {
return {
compare: function (actual: any, expected: any, anotherCustomArg: any): CustomMatcherResult {
// Your checks here.
const passes = actual === expected;
// Result and message generation.
return {
pass: passes,
message: passes ? `Actual equals expected`
: `Actual does not equal expected`,
}
}
}
}
};
NOTE that
compare
function can have as many custom-parameters as we want (or even Variadic),and that ONLY first-argument is required/reserved (to know actual-value);but if the function name begins with "toHave
" (instead oftoReallyEqual
), then the second argument is reserved for "key: string
" (to know object's field name, I mean, Jasmine2 will loop for us).Also, we could relay on Jasmine for message-generation, like:
message: util.buildFailureMessage('toReallyEqual', passes, actual, expected, anotherCustomArg),
接口(interface)文件 - matcher-types.d.ts - 不能与您的匹配器文件同名
declare namespace jasmine {
interface Matchers<T> {
toReallyEqual(expected: any, anotherCustomArg: any, expectationFailOutput?: any): boolean;
}
}
自定义匹配器测试
describe('Hello', () => {
beforeEach(() => {
jasmine.addMatchers(SomeCustomMatchers)
});
it('should allow custom matchers', () => {
expect('foo').toReallyEqual('foo');
expect('bar').not.toReallyEqual('test');
})
});
关于typescript - 使用 Typescript 创建自定义 Jasmine 匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956195/
我使用 File > Settings > JavaScript > Libraries 在 Webstorm 8.0.4 中设置 Jasmine 集成。我添加了 karma-jasmine带有我的
假设我有 spyOn($cookieStore,'get').and.returnValue('abc'); 对于我的用例来说,这太笼统了。任何时候我们打电话 $cookieStore.get('so
我正在阅读有关 Jasmine 测试的教程,它建议您应该使用标准 Jasmine 目录树结构(这似乎与 RSpec 目录树结构有关)。我用谷歌搜索了一个小时,找不到任何有关此标准目录树的信息。 考虑到
问题 如何使用Jasmine插件通过Jasmine运行Karma时更新所使用的karma-jasmine的版本? 仅当Jasmine插件集成了较新版本的karma-jasmine时,才会更新Jasmi
我想在每个规范执行后获得测试的通过或失败状态: var passed = jasmine.getEnv().currentSpec.results().passed(); if (!pas
我有一个与 Karma 一起运行的 Jasmine 测试: describe('When a logged in user chooses Rent and Payment PIN is enable
在我的新手理解中,Jasmine 提供了以下语法: describe('FooBar', function(){ it('should blah-blah', function(){ ex
我认为我通过编写这样的 Jasmine 模拟取得了很好的进展。但我无法修复这个错误。 spyOn 方法实际上是如何工作的?事实上这种方法似乎被广泛使用。 2.0 有什么变化 describe('Tes
有大量文档展示了如何将匹配器添加到 Jasmine 规范(例如 here )。 有人找到了向整个环境添加匹配器的方法吗?我想创建一组有用的匹配器,供任何和所有测试调用,而无需在我的规范中复制粘贴。 目
我正在尝试查找所有现有 Jasmine 期望匹配器(例如“toContain”等)的列表... 哪里可以找到这个?我搜索了一段时间,但找不到像 api 这样的东西。 Jasmine 网站也没有任何类型
我熟悉 python 单元测试测试,如果断言失败,该测试将被标记为“失败”,并继续进行其他测试。另一方面,即使其中一个失败, Jasmine 也会继续完成所有期望。如何让 Jasmine 在第一个期望
工具:Protractor 3.3.0、Jasmine 2.4.1、Selenium Standalone Server。 我有一个测试套件,里面有大量的 spec.js 文件,每个文件都包含我的应用
Jasmine 中是否有与 console.log 类似的方法?如果我想注销我 mock 的 $controller 或服务的值,有没有办法做到这一点? 最佳答案 您应该只使用 console.log
我已经通过运行 npm install jasmine -g 全局安装了 jasmine。 运行 jasmine -v 给我 jasmine v2.5.0 jasmine-core v2.5.0 然后
我有gulp-jasmine-phantom正在运行,但我得到 ReferenceError: Tictactoe is not defined 。我感觉我犯了一些根本性的错误。 我的文件结构: gu
我已经创建了一个 JavaScript 项目,需要使用 Jasmine 进行单元测试。我遵循了以下步骤: 1. npm install jasmine --save-dev - 从项目根目录 2.现在
我正在为我的应用程序使用 Yeoman+Angular Generator,我一直在努力与 Jasmine 相处!这就是我卡住的地方。我希望能够在 Jasmine 测试中使用 jQuery 选择器。我
it('should for something', function check(done) { browser.sleep(2000); $('.csTx').isPresent().th
Javascript 编码有点新,所以请耐心等待。 我阅读了以下链接 jasmine with jscoverage automated testing 但是,由于我没有 Ruby 项目,因此它似乎不
在Jasmine headless (headless)Webkit中运行测试时,我遇到了一个简单的TypeError: 'undefined' is not an object失败。但是没有提示在哪
我是一名优秀的程序员,十分优秀!