2014-03-21 2 views
1

У меня есть одностраничное приложение, которое использует Dojo для перемещения между страницами. Я пишу некоторые функциональные тесты с использованием стажера, и есть некоторые проблемы с niggly, которые я пытаюсь вытеснить. В частности, у меня возникли проблемы с тем, чтобы стажер работал с таймаутами. Ни один из тайм-аутов, похоже, не имеет никакого эффекта для меня. Я пытаюсь установить начальный тайм-аут загрузки с помощью «setPageLoadTimeout (30000)», но это кажется проигнорированным. Я также называю «setImplicitWaitTimeout (10000)», но опять же это, похоже, не имеет никакого эффекта.Intern.io Single Page Application Functional Testing

Основная проблема, с которой я сталкиваюсь, заключается в том, что в моей тестовой среде может потребоваться несколько секунд, чтобы запрос был отправлен, а ответ проанализирован и введен в DOM. Единственный способ, которым я смог обойти это, - это явно назвать «sleep (3000)», но это может быть немного удалено &, а иногда элементы DOM не готовы к тому времени, когда я их запрошу. (как упоминалось, setImplicitWaitTimeout (10000), похоже, не имеет для меня эффекта)

С приложением я запускаю событие, когда DOM обновлен. Я использую dojo.subscribe, чтобы подключиться к этому в applictaion. Можно ли использовать dojo.subscribe внутри стажера для контроля выполнения моих тестов?

Heres образец моего кода. Я должен также упомянуть, что я использую Dijit так что есть также небольшая задержка при получении ответа и виджеты создаются (с помощью деклараций данных додзё типа) ...

define([ 
    'intern!object', 
    'intern/chai!assert', 
    'require', 
    'intern/node_modules/dojo/topic' 
], function (registerSuite, assert, require, topic) { 
    registerSuite({ 
     name: 'Flow1', 
     // login to the application 
     'Login': function(remote) { 
      return remote 
       .setPageLoadTimeout(30000) 
       .setImplicitWaitTimeout(10000) 
       .get(require.toUrl('https://localhost:8080/')) 
       .elementById('username').clickElement().type('user').end() 
       .elementById('password').clickElement().type('password').end() 
       .elementByCssSelector('submit_button').clickElement().end(); 
     }, 
     // check the first page 
     'Page1':function() { 
      return this.remote 
       .setPageLoadTimeout(300000)  // i've tried these calls in various places... 
       .setImplicitWaitTimeout(10000) // i've tried these calls in various places...   
       .title() 
        .then(function (text) { 
         assert.strictEqual(text, 'Page Title');}) 
        .end()    
       .active().type('test').end() 
       .elementByCssSelector("[title='Click Here for Help']").clickElement().end()    
       .elementById('next_button').clickElement().end() 
       .elementByCssSelector("[title='First Name']").clear().type('test').end() 
       .elementByCssSelector("[title='Gender']").clear().type('Female').end() 
       .elementByCssSelector("[title='Date Of Birth']").type('1/1/1980').end()    
       .elementById('next_button').clickElement().end(); 
     }, 
     // check the second page 
     'Page2':function() {    
      return this.remote 
       .setImplicitWaitTimeout(10000)    
       .sleep(2000) // need to sleep here to wait for request & response injection and DOM parsing etc... 
       .source().then(function(source){ 
        assert.isTrue(source.indexOf('test') > -1, 'Should contain First Name: "test"'); 
        }).end() 
       // more tests etc... 
     } 
    }); 
}); 

Я импортирование соответствующий модуль Dojo из узла узла dojo-узла, но я не уверен, как его использовать.

Благодаря

+0

Не могли бы вы показать код, который используете? –

+0

Я просто добавил несколько примеров кода. Благодаря! – fatlog

+0

У кого-нибудь есть идеи? Даже сделав шаг назад с этим вопросом. Настройки «тайм-аута» с помощью обертки WD для меня не работают. Независимо от того, что я делаю, я не могу получить начальное время ожидания ожидания для возврата запроса, чтобы он отличался от значения по умолчанию 30 секунд. Кто-нибудь даже получил пример установленных функций тайм-аута? – fatlog

ответ

2

Ваш тест таймаут, потому Intern тесты имеют явный таймаут установлен в 30-е годы, которые не доступны через API. Его можно изменить, добавив 'intern/lib/Test' к вашему массиву определений, а затем перезаписав тайм-аут объекта Test, например. Test.prototype.timeout = 60000;.

Например:

define([ 
    'intern!object', 
    'intern/chai!assert', 
    'require', 
    'intern/node_modules/dojo/topic', 
    'intern/lib/Test' 
], function (registerSuite, assert, require, topic, Test) { 
    Test.prototype.timeout = 60000; 
    ... 
} 

Это должно изменить время ожидания на одну минуту вместо 30-х годов, чтобы предотвратить тестовое таймаут.

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