2015-07-09 2 views
0

У меня есть html-страница, которая запрашивает учетные данные после загрузки страницы. Как только правильные кредиты отправляются, выполняется асинхронная функция. Функция async возвращает обещание. Как только обещание будет разрешено, узел будет вставлен в dom с текстом ответа.Как написать функциональные тесты в js js в приложении, которое имеет асинхронные функции?

var executeRequest = Request(req); 
    executeRequest.then(function(response) { 
    var node = domConstruct.toDom("<div id='text'></div>"); 
    domConstruct.place(node, "title", "after"); 
    node.innerHTML = JSON.stringify(response); 
    }); 

Но тест не выполняется полностью, так как он не ждет, пока обещание будет устранено.

var dfd = this.async(15000); 
    return this.remote 
    .get(require.toUrl(url)) 
    .setFindTimeout(5000) 
    .elementById('dijit_form_ValidationTextBox_0') 
    .click() 
    .type('user1') 
    .end() 
    .elementById('dijit_form_ValidationTextBox_1') 
    .click() 
    .type('user1') 
    .end() 
    .elementById('dijit_form_Button_0') 
    .click() 
    .end() 
    .waitForElementById('text') 
    .text() 
    .then(dfd.rejectOnError(function(result) { 
     assert.equal(result.length, 2, 'When form is submitted, operation should complete successfully'); 
     dfd.resolve(); 
    }), dfd.reject); 

Что я делаю неправильно?

ответ

0

Я думаю, что это должно быть что-то вроде:

//ready is dojo/tests/support/ready 
return ready(this.get('remote'), require.toUrl(url)) 
    .setFindTimeout(5000) 
    .elementById('dijit_form_ValidationTextBox_0') 
    .click() 
    .type('user1') 
    .end() 
    .elementById('dijit_form_ValidationTextBox_1') 
    .click() 
    .type('user1') 
    .end() 
    .elementById('dijit_form_Button_0') 
    .click() 
    .end() 
    .waitForElementById('text') 
    .text() 
    .then(function (result) { 
     assert.equal(result, 'loaded'); 
    }); 
+0

не бен, он не работал. Это переход к следующему тесту, когда обещание возвращается методом async 'request'. Наверное, я неправильно обрабатываю эту часть. –

0

Когда this.remote.get(...) называется, на WebDriver сервер ожидает синхронные части (изображения, теги сценария и т.д.) целевой страницы для загрузки, а затем перемещается на. Если ваша страница содержит асинхронный код запуска, вам нужно добавить что-то в свой тест, чтобы дождаться завершения. Так как вы знаете, идентификатор элемента, который будет добавлен к странице, просто использовать findById ждать его:

return this.remote 
    // Load the page 
    .get(require.toUrl(url)) 

    // Make the find timeout long enough that your Promise should have 
    // completed 
    .setFindTimeout(5000) 

    // Start looking for the element that should be added; Intern will keep 
    // looking for up to findtimeout ms 
    .findElementById('text') 
    .end() 

    // At this point the element is in place, so the promise resolved 
    // rest of test 

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

  • Нет связанных вопросов^_^