我有像这样的javascript函数
function formatInput(input) {
//want to test only this immediate statement
var type = input.ipType.toString().toLowerCase().trim();
var afterVormat = someFunction(type);
return afterFormat;
}
我能够正确测试这个函数(afterFormat的值),但是有可能/如何测试函数中的特定行,因为我没有返回type
。
例如,我想测试var type
是否符合预期
答案 0 :(得分:2)
是否可以/如何测试功能中的特定线?
直接回答:不。
遵守TDD的结果之一是它迫使您在隔离的可测试块中构建代码。这是您无法对函数的各个行执行测试的直接结果。在您的情况下,解决方案是将您的代码重组为:
var type = function(){
return input.ipType.toString().toLowercase().trim();
};
function formatInput(input) {
var type2 = type();
var afterVormat = someFunction(type);
return afterFormat;
}
现在您已将type
设为可以测试的隔离块。
如果将此与Sinon.JS的使用结合使用,您可以使用间谍来测试function formatInput()
的调用是否也会导致调用type()
,从而确保您知道已为var type2
分配了预期值。
答案 1 :(得分:0)
我不知道javascript的任何特定的和更高级的单元测试方法/系统,但是您可以使用一个简单的断言函数来测试各行代码以进行调试,如下所示:
function assert(condition, message) {
if (!condition) {
message = message || "Assertion failed";
if (typeof Error !== "undefined") {
throw new Error(message);
}
throw message; // Fallback
}
}
(代码从TJ Crowder's answer转到另一个问题。)
然后你可以用它来检查var type
这样的例子:
assert(type == "something expected here and shall throw an error otherwise");
答案 2 :(得分:-1)
您可以使用console.log()
功能。如下所示。
function formatInput(input) {
var type = input.ipType.toString().toLowerCase().trim();
console.log(type);
var afterVormat = someFunction(type);
return afterFormat;
}
你也可以使用调试器;另外,逐行调试代码。
function formatInput(input) {
var type = input.ipType.toString().toLowerCase().trim();
debugger;
var afterVormat = someFunction(type);
return afterFormat;
}
然后按 F10 键调试代码,您可以在控制台中查看值。