JSLint在我的单元测试中

时间:2011-10-10 09:28:34

标签: javascript unit-testing jslint

我根据JSLint标准进行编码(不包括几个选项),我认为将其用于我的浏览器内单元测试可能是一个好主意,这样我就不会意外地提交任何不通过它的东西。我正在使用QUnit,但同样可以应用于任何浏览器内的测试框架。

我首先尝试了这段代码:

test("code passes JSLint", function () {
    var i, options;
    options = {
        browser : true,
        plusplus : true,
        unparam : true,
        maxlen : 120,
        indent : 4
    };

    // in QUnit `ok` is the equivalent of `assertTrue`
    ok(JSLINT(this.code, options));

    // Help me out a bit if it fails
    for (i = 0; i < JSLINT.errors.length; i++) {
        console.log(JSLINT.errors[i].line + ': ' + JSLINT.errors[i].reason);
    }
});

修改:忘记提及,我在设置中声明了this.code = myFunction.toString();

在Chrome中效果很好,所以我承诺并继续快速编码。当我在FF中尝试它时,我发现FF在将它们转换为字符串时似乎剥离了函数中的所有空格,因此它失败了。

我在本地进行编码和测试,因此使用AJAX下载JS文件并不是一个真正的选择。谁能想到更好的选择,还是只是浪费时间? (忽略JSLint作为一个整体的优点或缺点,请...那是为了另一个讨论)

2 个答案:

答案 0 :(得分:1)

您的开发环境是什么? Jslint可以集成到常见的IDE中,比如Eclipse和(我很确定)Visual Studio。我认为这是一个更好的选择,然后将它放入你的单元测试,即使它在单元测试中完美运行。

否则坚持使用单元测试方法,如果在Chrome中,你可以设置条件只运行Jslint测试 - Jslint检查的东西不需要在多个浏览器中测试。

答案 1 :(得分:1)

奇怪的是,我看到了相反的行为(在chrome [v17.0.x]中失败,在FF [v10.0.1]中传递)。无论哪种方式,另一种解决方案是告诉JSLINT不要担心white:true

的空格

您在coffeescript中的代码,将JSLINT设置为忽略空格:

  <script src="http://coffeescript.org/extras/coffee-script.js"></script>
  <script src="https://github.com/douglascrockford/JSLint/raw/master/jslint.js"></script>
  <script src="http://code.jquery.com/qunit/qunit-1.10.0.js"></script>

  <script>
    function myCode(){window.console.log("I have no whitespace");}
  </script>

  <script type="text/coffeescript">
    test "Code is LINT'able", ()->
      options =
        browser:true
        white:true #don't worry about whitespace
        sloppy:true #allow missing "use strict"

      ok JSLINT(myCode.toString(), options)
      JSLINT.errors.forEach (error)->
        console.log "#{error.line}: #{error.reason}"
  </script>