2012-09-23 2 views
3

После долгих поисков и довольно много пробного просмотра мне кажется, что выбранная комбинация инструментов просто не имеет его. Я ЛЮБЛЮ, чтобы ошибаться.Тестирование с использованием JsTestDriver + RequireJS + QUnit

Ну, технологический стек указан в названии. Для расширения,

  1. Backbone для всех "классов"
  2. RequireJS для загрузки и управления зависимостями между Backbone субъектами
  3. QUnit (где тесты также RequireJS модулей)
  4. JsTestDriver для автоматизации командной строки

установки и фрагменты кода

jsTestDriver.conf

server: http://localhost:48080 
basepath: path/to/JSTestDriver/ 
load: 
    - lib/qunit/qunit-1.10.0.js 
    - lib/qunit/equiv.js 
    - lib/qunit/QUnitAdapter.js 
    - lib/requirejs/require.js 
test: 
    - test/tests.js 
serve: 
    - lib/jquery/jquery-1.7.1.js 
    - test/components/ComponentOneTest.js 

tests.js

require({ 
    baseUrl : '/test', 
    shim : { 
     'fixture.object' : ['jquery'], 
     'fixture.string' : ['jquery'], 
     'fixture.dom' : ['jquery', 'fixture.string'], 
     'fixtures' : ['fixture.object', 'fixture.string', 'fixture.dom'], 
     'equiv' : ['qunit'], 
     'qunit.adapter' : ['qunit', 'equiv'] 
    }, 
    paths: { 
     'text' : 'lib/requirejs/text', 
     'jquery' : 'lib/jquery/jquery-1.7.1', 
     'backbone' : 'lib/backbone/amd/backbone', 
     'underscore' : 'lib/underscore/amd/underscore', 
     'fixture.dom' : 'lib/fixture/jquery.dom.fixture', 
     'fixture.string' : 'lib/fixture/jquery.lang.string', 
     'fixture.object' : 'lib/fixture/jquery.lang.object', 
     'fixtures' : 'fixture/fixtures', 
     'qunit' : 'lib/qunit/qunit-1.10.0', 
     'equiv' : 'lib/qunit/equiv', 
     'qunit.adapter' : 'lib/qunit/QUnitAdapter' 
    } 
}, [], function() { 
    module('Module 1', {}); 

    test('test 1', 1, function() { 
     ok(true, 'passed'); 
    }); 

    asyncTest('test 2', 1, function() { 
     start(); 
     ok(true, 'passed'); 

    }); 
}); 

сервера, начиная команду (из той же директории JSTD JAR находится в)

java -jar JsTestDriver-1.3.4.b.jar --port 48080 

Тесты бегущие команда (из того же каталога JST D JAR в)

java -jar JsTestDriver-1.3.4.b.jar --runnerMode PROFILE --reset --dryRunFor all --tests all 

Что работает?

Первый, синхронный, тест.

Что не работает?

Второй асинхронный тест не работает и отключается.

ошибка

Chrome консоль

Uncaught TypeError: Cannot read property 'all' of undefined qunit-1.10.0.js:1102 
done qunit-1.10.0.js:1102 
process qunit-1.10.0.js:1285 
(anonymous function) qunit-1.10.0.js:383 

Консольные

setting runnermode PROFILE 
Chrome: Reset 
Chrome: Reset 
Chrome 22.0.1229.64: 1 tests [ 
Module 1 (/test/test/tests.js) 
     test test 1 
     test test 2] 
.F 
Total 2 tests (Passed: 1; Fails: 1; Errors: 0) (30025.00 ms) 
    Chrome 22.0.1229.64 Windows: Run 2 tests (Passed: 1; Fails: 1; Errors 0) (30025.00 ms) 
    Module 1.test test 2 failed (30023.00 ms): Error: Callback '#1' expired after 30000 ms during test step 'start()' 
     Error: Callback '#1' expired after 30000 ms during test step 'start()' 

Sep 23, 2012 8:36:44 PM com.google.jstestdriver.ActionRunner runActions 
INFO: 

Примечания

Я загрузил последний адаптер QUnit с here. Я также попробовал кучу других, предположительно работающих, адаптеров безрезультатно.

Вопрос

даже возможно ли это? Если да, то кто-то был бы таким добрым, чтобы пролить свет на этот вопрос?

спасибо.

ОБНОВЛЕНИЕ (08.04.14):

Karma. Вот и все.

+0

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

+0

Нет. Не повезло. В другом моем проекте, однако, я решил пойти с Grunt и Phantom.JS для QUitits, и он работает нормально до сих пор. – ZenMaster

ответ

2

В асинхронном тесте нет смысла ставить простой набор операторов один за другим для выполнения. Асинхронный тест используется в основном, если мы не хотим останавливать и запускать тест, пока выполняется время выполнения теста, например тайм-аут или вызов ajax. Для имитации этого мы можем изменить

asyncTest('test 2', 1, function() { 
    start(); 
    ok(true, 'passed'); 
}); 

в

asyncTest('test 2', 1, function() {   
    setTimeout(function(){ 
     ok(true, 'passed'); 
     start(); 
    },2000);  
}); 

, который будет работать как шарм !!!

+1

Не имеет большого смысла, это немного поэтический вопрос. QUnit позволяет использовать OOB, и он работает. В любом случае, даже с вашим предложением, вышеуказанная настройка имеет серьезные проблемы с стабильностью. У вас есть реальный опыт работы над стеком выше? – ZenMaster

+0

На самом деле я столкнулся с той же проблемой в своем тестовом примере с теми же настройками. Как только я положил его в setTimeout, как показано в моем коде, он сработал. – Dilip

+0

Хм. Я действительно делал то, что вы предлагали раньше. В результате запуск с помощью 'runningMode PROFILE' пропускал тесты в целом, а' runningMode DEBUG' иногда работал и иногда терпел неудачу. Если вы можете поделиться своей настройкой и конфигурацией, я приму ответ. – ZenMaster

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