Обнаружение, когда тесты жасмина завершены - PullRequest
9 голосов
/ 12 мая 2011

Я бегу Жасмин тесты, подобные этому;

   jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
   jasmine.getEnv().execute();

Я хотел бы определить, используя JavaScript, когда тесты будут завершены. Как я могу?

Ответы [ 4 ]

5 голосов
/ 02 июня 2015

Как @Xv.предлагает, добавление репортера будет работать.Вы можете сделать что-то простое:

jasmine.getEnv().addReporter({
    jasmineDone: function () {
        // the specs have finished!
    }
});

См. http://jasmine.github.io/2.2/custom_reporter.html.

5 голосов
/ 10 июля 2013

Некоторые альтернативные способы:

A) Используйте ConsoleRunner, который принимает опцию onComplete.Более старые версии ( 1.2rc1 ) получают полный обратный вызов в качестве отдельного параметра.

Поскольку вы также предоставляете функцию, которая пишет (options.print), вы сохраняете контроль над записью отчетов о тестировании вконсоль.

Вы можете одновременно активировать несколько репортеров jasmineEnv.addReporter().

B) Не пробовали, но вы можете создать свой собственный репортер,с пустыми реализациями каждого открытого метода, но jasmineDone()

C) Проверьте старую запись в группе Google Jasmine , где автор сохраняет и переопределяет jasmine.getEnv().currentRunner().finishCallback:

    var oldCallback = jasmineEnv.currentRunner().finishCallback;
    jasmineEnv.currentRunner().finishCallback = function () {
        oldCallback.apply(this, arguments);
        $("body").append( "<div id='_test_complete_signal_'></div" );   
    };
    jasmineEnv.execute();
4 голосов
/ 13 мая 2011

Я нашел два разных способа решения этой проблемы. Одним из них является взломать жасмин, чтобы бросить пользовательское событие, когда оно завершается. Так как я хотел просмотреть скриншот после загрузки теста, я вставил триггер события в jasmine-html.js в конце «reportRunnerResults»

$( 'body' ).trigger( "jasmine:complete" );

Тогда слушайте событие:

$( 'body' ).bind("jasmine:complete", function(e) { ... }

В моем случае я запускал jasmine в iFrame и хотел передать результаты в родительское окно, поэтому я запускаю событие в родительском элементе из моей первой привязки:

$(window.parent).find('body').trigger("jasmine:complete");

Это также возможно сделать без jquery. Моя стратегия состояла в том, чтобы опросить текст, который будет добавлен в промежуток "Finished At". В этом примере я опрашиваю каждые 0,5 секунды в течение 8 секунд.

var counter = 0;

function checkdone() {
    if ( $('#test-frame' ).contents().find('span.finished-at').text().length > 0) {
        ...
        clearInterval(timer);
    } else {
        counter += 500;
        if (counter > 8000) {
            ...
            clearInterval(timer);
        }
    }
}

var timer = setInterval( "checkdone()", 500 );
1 голос
/ 02 декабря 2013

Я использую Jasmine 1.3.1 с HtmlReporter.В итоге я подключился вот так:

var orig_done = jasmineEnv.currentRunner_.finishCallback;
jasmineEnv.currentRunner_.finishCallback = function() {
    orig_done.call(this);
    // custom code here
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...