Я создаю приложение с угловыми углами, и я пишу для него блок-тесты. Yay модульные тесты. Я хочу издеваться над определенным веб-сервисом, который я использую (Filepicker.io), который имеет как REST API, так и Javascript API. В моем коде я использую API Javascript в вызовах, какОтказывание асинхронной веб-службы в тестах с угловым модулем
filepicker.store(file,
{
options: 'go',
right: 'here'
},
// filepicker's success callback
function(resultObject){
// do stuff with the returned object
}
Я знаю, что я мог бы использовать $ httpBackend поставщика, если бы я взаимодействующий с REST API Filepicker, но поскольку код моего приложения не делает этого, я Интересно, если/как я мог бы высмеять асинхронный API-вызов, подобный этому, в тесте с угловым модулем.
Я просто переопределяю метод хранилища (или весь объект filepicker) в контексте моего набора тестов и заставляю его возвращать фиктивные данные по моему выбору? Это то, что они делают с AngularFire development, с библиотекой, которая переопределяет «реальную» базовую службу Firebase.
Альтернативно, могу ли я обернуть метод в то, что использует $ httpBackend, поэтому я могу использовать все эти удобные методы $ httpBackend, например, отвечать? Какая здесь правильная стратегия? Первый выглядит как более простая и чистая идея.
Вот несколько других вопросов, которые были схожи, но в конечном итоге не ясны, чтобы я мог полностью понять.
AngularJS: unit testing application based on Google Maps API
Unit testing Web Service responses
Mocking Web Services for client layer unit testing
Было бы надлежать вам использовать $ window.filepicker, что позволяет сервис filepicker быть легко издевались, даже если он непосредственно включен где-то вместо того, чтобы с помощью службы, а также предотвращает jshint от жалуясь на глобальные переменные. – Kato