2015-01-26 2 views
3

Я пытаюсь получить доступ к БД в транспортире тестах с использованием драйвера SQL сервера для NodeJs (транспортир является nodejs приложения таким образом, это не проблема)Как удержать транспортир?

Идея заключается в том, чтобы проверить данные Db в наших тестах E2e:

  • Мы можем проверить, правильно ли написаны некоторые скрытые вещи в Db, которые не могут быть видны в пользовательском интерфейсе (ex Logs, ..)
  • Мы можем выделить функции в нашем тестировании e2e: мы не полагаемся на другую функцию для отображения данных, чтобы проверить, работает ли функция, записывающая данные.

Проблема, с которой я столкнулась, - это когда транспортир завершает взаимодействие с браузером, он прекратится. Поэтому, мой код, чтобы получить доступ к Db не может проверить данные, полученные (Исе expect(dataFromDb).toEqual('foo')), поскольку запросы к БД асинхронны в NodeJs.

В то время, когда я получить данные через функцию обратного вызова, транспортир был прекращен.

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

есть ли решение для поддержания транспортир жив, так что я могу проверить мои данные Db? Спасибо.

+0

@alecxe: транспортир следует рассматривать как настоящий тестер в реальном мире. В реальном мире тестер откроет браузер, проверит его, а затем отправится в Db, чтобы проверить данные. Следовательно, транспортир должен быть разработан с учетом этого. –

ответ

3

Две вещи, которые следует иметь в виду.

1) expect(dataFromDb).toEqual('foo')): Транспортировка завернутая expect для понимания обещаний. Однако он понимает только webdriver.promise (т. Е. Нет $ q или каких-либо других обещаний). Если вы хотите, чтобы сделать утверждения против не WebDriver обещаний, вы должны решить обещание себе, как:

dataFromDb.then(function(resolvedData) { 
    expect(resolvedData).toEqual('foo') 
}) 

2) транспортир не «прекратить». Транспортир только помогает вам начать тест с использованием другой тестовой среды (т. Е. Жасмина, мокко); когда он делает это, это только библиотека инструментов (например, локаторы, waitForAngular и т. д.), которые вы запускаете поверх этой тестовой среды. Это другая структура, которую вы должны предотвратить. Я не знаю, какие рамки вы используете, но я буду использовать жасмин в качестве примера:

it('call db', function(done) { //notice the inclusion of `done` 
    browser.get('something'); //this is protractor 
    element(by.xyz).click(); //this is protractor 

    var data = queryDatabase(); // you must tell jasmine to wait for this. 
    data.then(function(resolvedData) { 
    expect(resolvedData).toBe('foo'); 
    done(); // tell jasmine you're done. 
    }) 
}) 

примечания стороны, транспортир заплаты жасмина it ждать WebDriver команды, чтобы закончить (так же, как, как он пропатчен expect) для удобства пользователя. Однако, если вы не используете обещание webdriver, вам нужно сообщить it, когда тест выполняется с помощью обратного вызова done.

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