Функция Nightwatch.js не закрывается - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь выполнить функцию в начале моего теста, затем должен быть выполнен остальной тест.

Это моя настраиваемая команда (названная internalAdviceLinksHtml):

var solr = require('solr-client')

exports.command = function() {
  this
  var client = solr.createClient('solr.dev.bauerhosting.com', 8080, 'cms', '/www.parkers.co.uk');
  var globalSettingsQuery = client.createQuery()
      .q({TypeName:'Bauer.Parkers.GlobalSettings'})
      .start(0)
      .rows(10);  

  client.search(globalSettingsQuery,function(err,obj) {
    if (err) {
      console.log(err);
    } else {      
      var myresult = (obj.response.docs[0].s_InternalAdviceLinksHtml);

      console.log(myresult.length);
      if (myresult.length === 0) {
        console.log('content block not configured');
      } else {    
        console.log('content block configured');
      }
    }
  });        
  return this;
};

Тестовый файл ( script ):

module.exports = {
  'set up the solr query': function (browser) {
    browser
      .solr_query.global_settings.internalAdviceLinksHtml();
  },

  'links above footer on advice landing page displayed': function (browser) {
    browser
      .url(browser.launch_url + browser.globals.carAdvice)
      .assert.elementPresent('section.seo-internal-links')
  },

  'closing the browser': function (browser)  {
    browser
      .browserEnd();
  },  
}; 

Функция работает правильно (т. Е. Если myresultдлина равна 0, тогда "блок содержимого не настроен" отображается и т. д.), но при этом показывается следующий тест ( "ссылки выше нижнего колонтитула на целевой странице рекомендации" ) никогда не вызывается.

Кажется, что выполнение останавливается после пользовательской команды .Я уверен, что это будет для кого-то совершенно очевидным, но я просто не могу понять, что это такое.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 19 февраля 2019

Что касается вашей internalAdviceLinksHtml пользовательской команды, все выглядит хорошо с моей точки зрения ( Полагаю, что одинокий this был опечаткой ).

Ваша догадка верна,кажется, что тестер Nightwatch не может перейти к следующему тесту, что, вероятно, связано с тем, что какое-то обещание не было выполнено в восходящем потоке (функция client.search из internalAdviceLinksHtml).

Я бы порекомендовал сделать return this сразу после вывода на консоль ( блок контента не настроен или блок контента настроен ) и посмотрите, решит ли это проблему:

  client.search(globalSettingsQuery,function(err,obj) {
    if (err) {
      console.log(err);
    } else {      
      var myresult = (obj.response.docs[0].s_InternalAdviceLinksHtml);

      console.log(myresult.length);
      if (myresult.length === 0) {
        console.log('content block not configured');
      } else {    
        console.log('content block configured');
      }
    }
    return this
  });

Также несколько дополнительных указателей:

  • используют тест Nightwatch test-крючки , чтобы облегчить чтение / обслуживание тестов и создать разделение задач ( настройка => before / beforeEach крючки | teardown (например: browser.end()) => after / afterEach hooks);
  • вам не нужно делать явное browser.end() в конце вашего теста.Проверьте этот ответ для получения дополнительной информации по этому вопросу.

Ваш тест-файл станет:

module.exports = {
  // > do your setup here <
  before(browser) {
    browser
      .solr_query.global_settings.internalAdviceLinksHtml();
  },

  'links above footer on advice landing page displayed': function (browser) {
    browser
      .url(browser.launch_url + browser.globals.carAdvice)
      .assert.elementPresent('section.seo-internal-links');
  },
  // > do your cleanup here <
  after(browser)  {
    browser
      .browserEnd();
  },  
}; 
...