Подтвердить что ты не робот

Как ожидать динамического подсчета элементов в тестах e2e с помощью Protractor

В настоящее время я пишу несколько тестов e2e для моего скромного приложения Angular с помощью Protractor.

Мое приложение работает нормально, модульные тесты проходят все, e2e тоже используется... до этого:

appE2ESpec.js

describe('adding an item', function() {
  var items,
      addItemButton,
      startCount;

  beforeEach(function() {
    items = element.all(by.css('li.item'));
    addItemButton = element(by.id('addItemButton'));
    startCount = items.count();
  });

  it('should display a new item in list', function() {
    addItemButton.click();

    expect(items.count()).toEqual(startCount+1);
  });
});

Вот как я бы написал свой тест, но

Проблема заключается в следующем:, что items.count() возвращает обещание, я знаю это, но мне не удается заставить Protractor разрешить его. Поэтому я получаю следующее:

Failures:

1) myApp adding an item should display a new item in list
  Message:
    Expected 6 to equal '[object Object]1'.

Что я пробовал:

items.count().then(function(count) {
  startCount = count;
  //console.log(startCount) --> "6" Perfect!
});

Но получился тот же результат в конце... Я не могу поместить expect в then, я тоже об этом думал.

  • Я искал в репозитории Protractor GitHub проблемы, StackOverflow и группу Google AngularJs.

Приложение:

console.log(startCount) выводит это:

{ then: [Function: then],
  cancel: [Function: cancel],
  isPending: [Function: isPending] }

Я мог бы написать .toEqual(6), но я не хочу переписывать свой тест каждый раз, когда мне нужно изменить состояние запуска приложения.

Любая идея? Спасибо заранее!

4b9b3361

Ответ 1

Вам нужно решить обещание, а затем выполнить утверждение.

Транспортир разрешит обещание, которое вы передадите ожидать(), но не может добавить число к обещанию. Сначала вам нужно решить значение обещания:

beforeEach(function() {
  ...
  items.count().then(function(originalCount) {
    startCount = originalCount;
  });
});

it('should display a new item in list', function() {
  ...
  expect(items.count()).toEqual(startCount+1);
});

Ответ 2

При использовании chai для утверждений существует chai-as-promised, что позволяет справиться с promises более читаемым способом. Чтобы он работал, вам нужно сначала объявить:

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);

а затем в коде:

// here is modified remaind of the code from the original question:
it('should display a new item in list', function() {
  addItemButton.click();

  expect(items.count()).should.eventually.equal(startCount+1);
});