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';
}
我正在使用 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';
}