构建自己的断言类

时间:2017-08-26 18:40:41

标签: typescript types tdd assert

我想创建自己的小断言类。我尝试安装mocha和chai,但是从这些模块的深处得到了很多很多错误,所以目前我宁愿尝试一些自建的东西,如果不是至少要了解更多的TypeScript。

我找到了一个类的好模板(https://gist.github.com/brunolm/6031927),并且IsFalse,IsTrue,AreEqual的实现工作得很好。我用IsNullOrUndefined对我的需求进行了扩展,到目前为止都很好。

我还想使用IsInstanceOf测试。它实现如下:

public static IsInstanceOfType(expectedType: Function, actual: any): void {
    if (!(actual instanceof expectedType)) {
        // some more code to construct a message, and throw
    }
}

我无法让代码工作。我不知道如何/作为第一个参数传递什么。我试试这个

Assert.IsInstanceOfType((): List<string> => { return undefined; }, list);

与List&lt;&gt;是我自己的通用集合类,列表是它的一个实例(或者不是......那就是找出来的。)

上面的代码编译,但断言失败,即使它不应该。我发现“传递一个返回你期望的类型的函数”很奇怪,如果可能的话,我会更喜欢更好的东西。 如果这是要走的路,那我就错了 - 你会怎么用呢?

我问作者,他建议我应该这样打电话

Assert.IsInstanceOfType(List<string>, list);

但是编译器没有通过,这可能不对,或者是吗?我无法让它工作 - 这是写出的类型,而不是函数?!?

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

public static IsInstanceOfType(type: Function, instance: any): void {
    if (!(instance instanceof type)) {
        // some more code to construct a message, and throw
    }
}

然后

const Foo = function() {};
Assert.IsInstanceOfType(Foo, new Foo()); // true

我希望这会引导你走向解决方案。

如果您需要更多帮助,请提供 List 对象的代码。