2017-01-18 10 views
0

Я использую intern для автоматизации тестирования пользовательского интерфейса. У меня есть тест, в котором ввод неверного имени пользователя приводит к ошибке тестирования. Тем не менее, мой тест не терпит неудачу, когда он должен.тест не работает с использованием chai assert with intern

шаги я хочу автоматизировать:

  1. ввести имя пользователя следующую кнопку
  2. щелчка
  3. проверить, если пароль текстовое поле отображается (текстовое поле пароля отображается только если имя пользователя является действительным еще остаются на той же странице)

Вот мой код:

Страница сценария объекта:

enterLoginName: function (username) { 
     console.log('entering username'); 
     return this.remote 
      .findById(this.locator.uname).clearValue().sleep(1000) 
      .type(username) 
      .end().then(function() { 
       console.log('username entered '); 
      }) 
      .findById(this.locator.nextbtn).sleep(1000) 
      .click().end(); // enter login name and click next button 
    }, 
    isValidUsername:function() { 
     console.log('checking if password textbox is displayed'); 
     return this.remote 
      .findDisplayedById(this.locator.pwd).isDisplayed(); 
      //passowd test box is only shown if username is valid 
    }, 

Test Script:

 'correct login name lands to password page': function() { 

      loginPage.enterLoginName('ss').then(function() { 
       loginPage.isValidUsername().then(function (pass) { 
        console.log(pass); 

       }, function (fail) { 
       // code reaches here since password test box is not displayed 
        console.log('user name uas valid , enter password panel not was shown'); 
        assert.fail(0, 1, 'Exception not thrown');// test not failing 
       }); 

      }) 

Может кто-то пожалуйста, объясните, что не работает здесь и как заставить его работать правильно?

ответ

3

Вы должны вернуть loginPage обещание цепи:

return loginPage.enterLoginName('ss')... 
+0

я не понимаю. Вы можете объяснить?? – CodeBlooded

+0

В тестовом скрипте вы вызываете функции, которые являются асинхронными и которые возвращают Promise (или объекты, подобные обещаниям), например 'loginPage.enterLoginName'. При использовании обещаний в тестах вам необходимо: 1) вернуть конец Цепочки Promise, чтобы Интернл мог сказать, когда операция async завершена, и 2) убедитесь, что вы возвращаете любые обещания, сгенерированные в обратных вызовах 'then', чтобы гарантировать, что _all_ async операции. Поэтому вам нужно 'return loginPage.enterLoginName' на внешнем уровне и' return loginPage.isValidUsername' в обратном вызове 'then'. – jason0x43