在javascript单元测试中测试单独的行

时间:2016-11-16 06:22:35

标签: javascript unit-testing mocha

我有像这样的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是否符合预期

3 个答案:

答案 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 键调试代码,您可以在控制台中查看值。