javascript - 为了更好地进行单元测试,静态类型 javascript 的示例是什么?

标签 javascript angularjs unit-testing jasmine ecmascript-6

我是测试新手,但最近我一直在尝试使用 angularJS 和 Jasmine。

随着 ES6 的出现,新的框架/语言也随之而来,例如:atScript 和 google Angular-dart。两者现在都支持可选类型 javascript 并且他们声称它变得更容易测试?

问题: 1. 作为测试新手,有人可以给我一个实际的示例/用例来说明静态类型的 javascript 如何更好地进行单元测试。此外,还有一个普通 javascript 单元测试无法实现的示例?

最后,如果这不是 stackoverflow 问题,我们可以将其移动到适当的 stack 子域吗?

最佳答案

基于类型的断言是可能的。例如:

is(value : Dynamic, type : Dynamic, ?msg : String , ?pos : PosInfos)

Asserts successfully when the 'value' parameter is of the of the passed type 'type'.

raises(method:Void -> Void, ?type:Class<Dynamic>, ?msgNotThrown : String , ?msgWrongType : String, ?pos : PosInfos)

It is used to test an application that under certain circumstances must react throwing an error. This assert guarantees that the error is of the correct type (or Dynamic if none is specified).

这段代码:

enum Color { R, G, B }

function f1(x: Color | string) {
    if (typeof x === "number") {
        var y = x;
        var y: Color;
    }
    else {
        var z = x;
        var z: string;
    }
}

function f2(x: Color | string | string[]) {
    if (typeof x === "object") {
        var y = x;
        var y: string[];
    }
    if (typeof x === "number") {
        var z = x;
        var z: Color;
    }
    else {
        var w = x;
        var w: string | string[];
    }
    if (typeof x === "string") {
        var a = x;
        var a: string;
    }
    else {
        var b = x;
        var b: Color | string[];
    }
}

需要垫片来实现以下目的:

  • 枚举
  • 类型提示 ( x: Color )
  • 联合类型 ( | )

和这段代码:

class A {
    propA: number;
}

class B {
    propB: number;
}

class C extends A {
    propC: number;
}

declare function isB(p1): p1 is B;
declare function isC(p1): p1 is C;
declare function retC(x): C; 

declare function funA<T>(p1: (p1) => T): T;
declare function funB<T>(p1: (p1) => T, p2: any): p2 is T;
declare function funC<T>(p1: (p1) => p1 is T): T;
declare function funD<T>(p1: (p1) => p1 is T, p2: any): p2 is T;
declare function funE<T, U>(p1: (p1) => p1 is T, p2: U): T;

let a: A;
let test1: boolean = funA(isB);

if (funB(retC, a)) {
    a.propC;
}
let test2: B = funC(isB);
if (funD(isC, a)) {
    a.propC;
}
let test3: B = funE(isB, 1);

需要垫片来实现以下目的:

  • 用户定义的类型保护 ( p1 is B )
  • 返回值的类型转换 ( funA<T>(p1: (p1) => T): T )

引用文献

关于javascript - 为了更好地进行单元测试,静态类型 javascript 的示例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27916136/

相关文章:

javascript - Angular 2 - 验证文件是否确实是图像

javascript - 如何使用 WebStorm 中的内置 Web 服务器打开/调试当前文件?

javascript - 基于 ng :repeat 的运行总计

javascript - 使用 Bootstrap 模式防止子元素的父 onclick 事件传播

javascript - 为什么客户端不会在公用文件夹中收到此脚本的新版本?

javascript - Angular : Update A Function In RealTime

c++ - 图像旋转单元测试

c# - 对不存在的数据库进行单元测试的最佳方法

c# - 如何使用 FluentAssertions 断言集合按 2 个属性排序?

javascript - 错误 415。使用 Spring 提供 REST 服务 - AngularJs