Я пытаюсь выполнить модульный тест для контроллера angularjs. Контроллер выполняет вызов службы, которая реализует http get. После выполнения этого вызова в случае успеха значение присваивается переменной области. Но дело в том, что я не нахожу, как имитировать это действие. Здесь я оставляю свой код.
Сервис:
export class AnalysisService extends Observable {
constructor($log, $http, tenant, trainer){
"ngInject";
// call super constructor
super();
this.$http = $http;
this.tenant = tenant;
this.trainer = trainer;
}
getDeploys(project, analysis)
{
return this.$http.get(`${this.trainer}/${this.tenant.id}/projects/${project}/analyses/${analysis}/deploys`);
}
}
Контроллер:
export class ModelsController {
constructor($scope, $routeParams, analysis){
$scope.opt = false;
$scope.data = {};
analysis.getDeploys($scope.project, $scope.analysisId)
.then(
function(analDep)
{
$scope.opt = true;
$scope.data = analDep.data;
},
function(analDepErr)
{
console.log(analDepErr);
},
);
}
Модульный тест:
import 'angular-mocks';
describe('ModelsController', function() {
beforeEach(angular.mock.module("my-trainer"))
var $controller, mockAnalysis;
beforeEach(inject(function(_$controller_, analysis){
$controller = _$controller_;
mockAnalysis = analysis;
}));
describe('Unit test Controller ModelsController', function() {
var $scope, controller;
beforeEach(function() {
var fakeHttpPromise = {
then: () => {
return {
data: {
_embedded: {
collectors: [
{id:1, name:'demo1'},
{id:2, name:'demo2'},
{id:3, name:'demo2'}
]}
}};
}};
});
spyOn(mockAnalysis, 'getDeploys').and.returnValue(fakeHttpPromise);
controller = $controller('ModelsController', { $scope: $scope, analysis: mockAnalysis });
it('checking $scope.opt and $scope.data after call analysis', function() {
//..........................
// here my problem. I have done many things but none works for me
//.........................
});
})