【问题标题】:How to test the returned value of a method [Jasmine]如何测试方法的返回值 [Jasmine]
【发布时间】:2020-05-11 18:11:09
【问题描述】:

我是使用 Jasmine 和 Karma 进行单元测试的新手。我的问题与此非常相似:

How to unit test return value of function - Angular (Jasmine/Karma)

但我的不同,因为我想检查返回值的长度而不是值本身。我有一个将n 作为数字的方法。如果数字低于 10,则该方法应返回相同的数字,但前面带有 0 作为字符串。有效范围是 0 到 12(实际上它是月份选择器组件的一部分。我正在尝试实现 MM 格式。)。例如,如果输入 5,则返回值应为字符串形式的 05。代码如下:

convertToDoubleDigit(n) {
    n = String(n);
    if (n.length === 1) {
        n = '0' + n;
    }
    return n;
}

我的测试用例是:

it('should call convertToDoubleDigit and convert to double digit', () => {
    fixture.componentInstance.convertToDoubleDigit(2);
    expect(fixture.componentInstance.length) <----- This is what I'm asking
})

我知道我应该这样做:

expect(fixture.componentInstance......length).toBe(2)

请帮我测试这部分。我无法跳出框框思考。

【问题讨论】:

    标签: angular unit-testing jasmine


    【解决方案1】:

    你不应该检查长度,而是instead of value here would valid test case

    it('should call convertToDoubleDigit and convert to double digit', () => {
        fixture.componentInstance.convertToDoubleDigit(2);
        expect(fixture.componentInstance.value).toEqual(02)
    })
    

    【讨论】:

    • 哦……非常感谢 Rajnikanth 先生。 (我已经是你的忠实粉丝了)。所以我认为在检查数组是否填充时应该使用length。如果我错了,请纠正我。
    • value 将是未定义的。我们在这里检查谁的价值?因为n 是一个仅限于convertToDoubleDigit 方法的参数。
    • @Tanzeel:在这种情况下,您应该在该函数上使用 spyOn。
    • 是的,我也这么认为。我只是在尝试。我会尽快给您回复。请给我 5 分钟。
    • 一般的经验法则是不要测试私有方法,你不能也只能测试公共方法。有些可以在单元测试中覆盖,有些可以在 E2E 中覆盖……代码覆盖率最高可达 80% 左右
    猜你喜欢
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2021-09-03
    • 2015-02-15
    • 1970-01-01
    相关资源
    最近更新 更多