2014-11-19 2 views
0

Я хочу выборочно запускать тесты мокки в браузере даже после того, как несколько файлов с тестами были загружены с помощью requirejs. На данный момент, если я загружаю user_model_tests и user_view_tests с помощью js, каждый раз после этого, когда я вызываю mocha.run(), все они запускаются.выборочно запускать тесты Mocha в браузере

Конечная цель состоит в том, чтобы выборочно запускать тесты на основе того, что пользователь отключил ящики в форме, и только те тесты отображаются в браузере. Прямо сейчас это работает в первый раз, чтобы выборочно загружать и запускать тесты, но как только тесты загружаются, даже если пользователь отключает флажки, тесты все еще выполняются, потому что они были необходимы ранее.

Есть ли решение в рамках мокко? Или мне нужно как-то сбрасывать кэш requirejs?

var TestRunner = { 
    start: function(tests) { 
     require(tests, function(require) { mocha.run() }); 
    }, 

    formListener: function() { 
     $('form.test-selector').submit(function(event) { 
      event.preventDefault(); 
      var choices = $('form.test-selector input.test-choice'); 
      var selections = [] 
      _.forEach(choices, function(choice) { 
       if ($(choice).is(':checked')) { 
        selections.push($(choice).val()); 
       } 
      }) 
      TestRunner.start(selections); 
     }) 
    } 
}; 

$(document).ready(function() { 
    TestRunner.formListener(); 
}) 

ответ

0

При использовании обоих requirejs и мокко:

Mocha будет запускать любые тесты были загружены requirejs в контексте.

Хитрость заключается в том, чтобы использовать require.undef(), чтобы удалить тесты из контекста каждый раз после запуска тестов. Как только это будет сделано, у вас будет чистый список, который будет запускаться в зависимости от того, какие тесты вы хотите в следующий раз.

 start: function(tests) { 
     $('#mocha').html(''); 

     require(tests.concat('vendor/mocha'), function() { 
      var mocha = _(arguments).last(); 
      mocha.setup('bdd'); 
      var expect = chai.expect 
      chai.use(chaijquery); 

      mocha.run(); 
     }); 

     require.undef('vendor/mocha') 
     tests.forEach(function(test) { 
      require.undef(test); 
     }) 
    }, 

(Обратите внимание на последние 4 строки, устраняющие тестовые файлы из контекста.)

Смежные вопросы