2013-07-10 3 views
1

Я пытаюсь написать пользовательский репортер, который будет выводить результаты стажировки в файл, но я достиг контрольно-пропускного пункта.Можно ли записать файл из пользовательского репортера?

Мне удалось получить интерфейс API файловой системы узла через загрузчик dojo Intern, но ни writeFile, ни writeFileSync ничего не делают (разница в том, что writeFileSync блокирует процесс).

Минимальная версия моего репортера код:

define(["node_modules/intern/node_modules/dojo/node!fs"], function (fs) { 
    var buffer = ""; 
    return { 
     "/test/pass": function(test) { 
      buffer += test.id + " passed\n"; 
     }, 
     "/test/fail": function(test) { 
      buffer += test.id + " failed\n"; 
     }, 
     "/runner/end": function() { 
      fs.writeFileSync("result.txt", buffer, function (error) { 
       if (error) { 
        throw error; 
       } 
       console.log("File saved"); 
      }); 
     } 
    }; 
}); 

Если я заменить вызов записи с лог консоли, я получаю ожидаемые данные, поэтому все остальное, кажется, работает нормально.

Edit: Модифицированный код, который работает:

define(["node_modules/intern/node_modules/dojo/node!fs"], function (fs) { 
    var buffer = ""; 
    return { 
     "/test/pass": function(test) { 
      buffer += test.id + " passed\n"; 
     }, 
     "/test/fail": function(test) { 
      buffer += test.id + " failed\n"; 
     }, 
     "/runner/end": function() { 
      fs.writeFileSync("result.txt", buffer); 
      console.log("File saved"); 
     } 
    }; 
}); 
+0

Вы используете свои тесты с помощью узла или браузера? –

+0

Я использую узел. Тесты - это функциональные тесты, выполняемые с локальным сервером Selenium. –

ответ

1

Да, можно записывать файлы с репортерами-lcov reporter делает именно это. Однако до тех пор, пока не будет выпущен Intern 1.2, асинхронные операции ввода-вывода будут иметь потенциал для неправильного завершения, потому что процесс принудительно завершается в конце тестового прогона.

+0

Да, я понимаю проблему с принудительным завершением процесса - но объясняет ли это, почему вызов writeFileSync просто зависает? Похоже, репортер lcov по сути делает то же самое, но через Стамбул, поэтому, возможно, моя проблема связана с тем, как я импортирую файловую систему. –

+0

Синхронные функции не имеют обратных вызовов. –

+0

Doh ... похоже, что это была проблема, я удалил обратный вызов, и теперь он работает. Я, конечно, не проверял другую подпись при смене с асинхронной версии: facepalm :. –