I introduced a MyDataApiService dependency into ThingBuilderService, and now ThingBuilderService tests are failing. How do I mock MyDataApiService and tell ThingBuilderService about it in tests?
export default class ThingBuilderService {
public static $inject = ['MyDataApiService'];
public myData: any[];
/**
* Construct an instance of ThingBuilderService.
*
* @param {xyz.MyDataApiService} myDataApiService The MyDataApiService object.
*/
constructor(myDataApiService: xyz.MyDataApiService) {
myDataApiService.getSomeData()
.then((response) => this.myData = response.data);
}
//...
}
Test: (I've included code showing part of what I think I need to do, but I don't understand how to fit the pieces together.
describe('Thing Builder Service', () => {
var service;
var mockMyDataApiService = {};
beforeEach(() => {
var mockMyDataApiService.getSomeData = () => {
var deferred = $q.defer();
deferred.resolve({ data: [
{
'ItemId': 1010101,
'Description': 'asdfasdf'
},
{
'ItemId': 1010102,
'Description': 'jkjkjkjk'
}
]});
return deferred.promise;
};
// *********** now what? ***********
// and do I have to do something to make '$q'
// available in the getSomeData function?
angular.mock.module('abc.module');
angular.mock.inject(_ThingBuilderService_ => {
service = _ThingBuilderService_;
});
});
// tests here
it('should ...', () => { ... });
});
Test runs are giving errors like this:
Error: [$injector:unpr] Unknown provider: MyDataApiServiceProvider <- MyDataApiService <- ThingBuilderService
and this:
Error: Base URL not defined for MyDataApiService
You have to provide your mocked service:
angular.mock.module(function($provide) {
$provide.service(„MyDatApiService“, mockMyDataApiService);
});