@TempUserMain

Как перевести асинхронные тесты с JSTestDriver на Jasmine?

В JSTestDriver имеется возможность создавать асинхронные тесты при помощи:
queue.call();
Данных блоков может идти несколько подряд.

Мне неообходимо перевести тесты с JSTestDriver на Jasmine.

В Jasmine для создания асинхронных тестов используется spies и done().

С done() относительно просто - выполнил необходимый код и в конце вызываем done(). Но как быть, если один блок зависим от другого ( например, в первом создается какой-то элемент, а в последующем он используется ) и как сделать так, чтобы они выполнились корректно?

Подскажите, пожалуйста, как перевести асинхронные тесты с JSTestDriver на Jasmine ?
Помимо этого, буду рад ссылкам на статьи, в которых доступно описаны особенности перевода тестов на Jasmine.
  • Вопрос задан
  • 2559 просмотров
Пригласить эксперта
Ответы на вопрос 2
Думаю, в вашем случае больше подойдет Jasmine версии 1.3 - jasmine.github.io/1.3/introduction.html

У них была поддержка подобных штук - runs / waitsFor.

var id = 0;
        runs(function() {
            setTimeout(function() {
                console.log('1st');
                id = 4;
            }, 5000);
        });

        waitsFor(function() {
            return id === 4; //если за 7секунд эта штука не вернет true, получим ошибку "timeout: timed out after 7000 msec waiting for id === 4" и дальше выполнение не пойдет
        }, 'id === 4', 7000);

        runs(function() {
            //в эту функцию мы перейдем, только после того как предыдущая waitsFor вернет true.
            console.log('2nd');
            expect(id).toEqual(4);
        });

        runs(function() {
            console.log('3rd');
            setTimeout(function() {
                id = 8;
            }, 5000);
        });

        waitsFor(function() {
            return id === 8;
        }, 'id === 8', 7000);

        runs(function() {
            console.log('4th');
            expect(id).toEqual(8)
        });


Для 2.0 единственное решение - заводить несколько it и делать done после каждого.. Но это не очень хорошее решение - не для того it предназначается.
Ответ написан
@inmarko
Исходя из собственного опыта, я бы заврапил тот фреймворк, который вы используете для создания и управлениями элементами на странице, так чтобы каждый метод, возвращял promise тогда на промисах можно построить весь тест. Сам жасмин можно избавить от done() ит.д. и .тп. чтобы код был более красив, да и сам it заварачивался в промис. Посмотри в сторону jasminewd с его помощью можно запатчить сам жасмин, и тесты будут красивы =) и все будет работать так как надо. И будут тесты выглядеть примерно так
describe("Some test-suite", function(){
it("Simple test", function(){
page.createElement(a);
page.element(a).test();
})
})

Может ответ сумбурный, надеюсь наведет на нужные мысли, и направит в правильном направлении =)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы