JSLint в моих модульных тестах - PullRequest
1 голос
/ 10 октября 2011

Я кодирую в соответствии со стандартами 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 ]

1 голос
/ 28 ноября 2012

Как ни странно, я наблюдаю противоположное поведение (происходит сбой в 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>
1 голос
/ 10 октября 2011

Какая у вас среда разработки? Jslint может быть интегрирован в общие IDE, такие как Eclipse и (я почти уверен) Visual Studio. Я думаю, что это был бы лучший вариант, чем помещать его в свои юнит-тесты, даже если он отлично работал в юнит-тестах.

В противном случае, чтобы придерживаться подхода модульного тестирования, возможно, вы могли бы поставить условное выражение для запуска теста Jslint только в Chrome - вещи, которые Jslint проверяет, не нужно тестировать в нескольких браузерах.

...