2013-12-11 8 views
4

Вот моя проблема, шаг за шагом :)) Я думал, что это лучше читается таким образом, в отличие от стены текста, жалко пытаясь объяснить мою специфическую проблему.Угловые тесты e2e, влияющие на базу данных

1) У нас есть приложение Angular.js с PHP back-end с поддержкой MongoDB.

2) Protractor для сквозных испытаний.

3) Необходимо протестировать страницы, которые изменяют базу данных, то есть сценарий регистрации. Я проверяю все этапы регистрации в тесте, поэтому db получает новую пользовательскую запись.

4) Как и ожидалось, тест завершится с ошибкой после его запуска, поскольку у db есть запись для тестового пользователя, и регистрация не требуется - вместо этого пользователь перенаправляется на главную страницу.

Я думал получить пакет mongodb для node.js и взаимодействовать с БД в тестах.
Но это просто не так: файлы конфигурации для подключения к БД находятся в файлах php на бэкэнд, в то время как я пытаюсь написать тесты для чисто front-end части нашего приложения.

Любые идеи?

+1

Что вы пытаетесь проверить здесь? Важно изолировать цель ваших тестов. Если ваша цель - тесты E2E для вашего проекта AngularJS, вы будете издеваться над взаимодействием HTTP, используя http://docs.angularjs.org/api/ngMockE2E.$httpBackend. – pherris

+0

К сожалению, в тестах транспортира нет функции 'inject', поэтому вы не можете вводить макет' $ httpBackend', как вы делали бы это в модульных тестах Karma. :( –

+0

Вы, очевидно, не понимаете концепцию «от конца до конца», если вы говорите о насмешливости. Это приемочные тесты и должны быть именно тем, что испытывает конечный пользователь. Я не знаю ни одного * конечные пользователи моего приложения, которые вводят насмешливую библиотеку в мой код. – hackel

ответ

1

Я бы издевался над взаимодействием с вашим PHP-приложением. Это позволит вам изолировать ваши тесты с угловым кодом и более четко проверить наличие краев в ваших данных (или проблем на стороне сервера). . http://docs.angularjs.org/api/ngMockE2E $ httpBackend

Вот еще один ответ, который может быть полезным для вас: mock $httpBackend in angular e2e tests

+1

Привет, избиратель, почему бы не добавить некоторые комментарии к тому, что вы думаете об этой проблеме? – pherris

+1

Если вы насмешливые вещи, то это уже не сквозной тест Это просто еще одна форма тестирования интеграции. Это не то, что ищет OP. – hackel

+0

Однако это конец кода UI. – pherris

3

Существует простой способ сделать это. Если у вас есть угловое обслуживание в вашем приложении, которое говорит с вашим back-end, вы можете назвать его от транспортира.

Вот пример:

https://github.com/andresdominguez/protractor-meetup/blob/master/test/e2e/api-helper.js

function createObject(data) { 
    return browser.executeAsyncScript(function(data, callback) { 
    var api = angular.injector(['ProtractorMeetupApp']).get('apiService'); 
    api.member.save(data, function(newItem) { 
     callback(newItem._id); 
    }); 
    }, data); 
} 

Этот код будет сериализованная и он будет выполнен в браузере. У меня есть сервис под названием apiService в модуле ProtractorMeetupApp. Служба API может создавать, обновлять и т.д.

Ваш тест будет выглядеть следующим образом:

https://github.com/andresdominguez/protractor-meetup/blob/master/test/e2e/member3-spec.js

it('should call api', function() { 
    // Create a new member. 
    createObject({name: 'test member'}).then(function(id) { 
    console.log(id) 
    }); 
}); 
Смежные вопросы