JavaScript 使用 Jasmine 将数字转换为字符串测试

JavaScript casting number to string test with Jasmine

我正在使用 Jasmine 框架为我的 JS 代码编写一些单元测试,以学习 Jasmine 的基础知识。这更像是一个 JS 问题,而不是 Jasmine 问题。

我查看了JS字符串转换方法并查看了Casting to string in JavaScript。我可能错误地使用了 toString() 。

我写的函数是这样的:

function factorial(input) {

    var result = 1;

    if(input === 0) {
        result = 0;
    } else if(input < 0) {
        result = "cannot compute factorial of negative number";
    } else if(input.isString) {
        result.toString();
        result = "input is not a number";
    } else {
        for(var i = 1; i <= input; i++) {
            result *= i;
        }
    }
    return result;
}

Jasmine 规范如下所示:

describe("Factorializer", function() {
    it("factorial() should return the correct factorial value of an input > 
        0.", function() {
            expect.factorial(3)).toBe(6);
    });

    it("factorial() should return 0 if the input = 0.", function() {
        expect.factorial(0)).toBe(0);
    });

    it("factorial() should return 1 if the input = 1.", function() {
        expect.factorial(1)).toBe(1);
    });

    it("factorial() should return an error if the input is negative.",
        function() {
            expect.factorial(-5)).toBe("cannot computer factorial 
                negative number");
    });

    it("factorial() should return an error if the input is not a 
        number.", function() {
            expect.factorial("Herro")).toBe("input is not a number");
    });

    it("factorial() should return an error if the input is not a 
        number.", function() {
            expect.factorial("Herro")).toBeNaN();
    });
});

只要输入是字符串,结果始终为 1。要么从未输入 else if(input.isString),要么结果没有被赋予语句中应有的值。我倾向于前者,因为之前的 else if 似乎在工作(它通过了 Jasmine 测试)。最后两个 Jasmine 测试失败了,这很好,因为它确认 Jasmine 正在工作并且我发现我的代码有问题。

我正在尝试修复 Jasmine 发现的问题;我不会尝试更改 Jasmine 测试,除非它们有问题,我认为没有问题。

typeof input === 'string'替换input.isString,去掉result.toString();。它没有做任何有用的事情。

编辑:此外,您的最后两个测试似乎是多余的。

} else if(input.isString) {
    result.toString();
    result = "input is not a number";

上面没有做任何事情。

javascript中没有isString属性,而.toString()是returns一个值的函数,它没有编辑到位,无论如何都没关系,因为无论如何您都会在下一行覆盖它!

就我个人而言,我更喜欢

input = parseInt(number, 10);
if (isNaN(input)) {
    result = 'input is not a number';
}