0
Jasmine에서 테스트를 실행할 때 오류가 발생합니다. 모의 아약스 호출 테스트를 만들려고합니다. 데이터 자체는 중요하지 않습니다. 테스트를 실행하고 싶습니다. 재스민의TypeError : 정의되지 않은 '_scope'속성을 읽을 수 없습니다.
export interface IMockScope extends ng.IScope {
promotion: any;
prometricId: string;
}
export class MockController {
private _mockService: MockService;
private _scope: IMockScope;
constructor($scope: IMockScope, mockService: MockService) {
// assigning scope and service
this._mockService = mockService;
if ($scope === undefined) {
throw ("exception");
}
if (typeof($scope) === "MockController") {
console.log("I am the right type");
}
this._scope = $scope;
// getting a prometric ID for the promotion to load
this._scope.prometricId = "xxx";
// loading a promotion through a service call
this._mockService.GetPromotion(this._scope.prometricId).then(function (data: any) {
this._scope.promotion = data;
}, null);
}
}
export class MockService {
private _$http: ng.IHttpService;
private _$q: ng.IQService;
constructor($http: ng.IHttpService, $q: ng.IQService) {
this._$http = $http;
this._$q = $q;
}
GetPromotion(prometricId: string): ng.IPromise<any> {
var deferred = this._$q.defer();
var data = {
prometricId: prometricId
};
var promotion: any;
this._$http.get("/PreEval/GetPromotion").then(function (data: any) {
promotion = data;
deferred.resolve(promotion);
}, null);
return deferred.promise;
}
}
var mockApp = angular.module('mockApp', []);
//mockApp.controller('MyController', MyController);
mockApp.controller('MyController', ["$scope", "mockService", function ($scope: IMockScope, mockService: MockService) {
return new MockController($scope, mockService);
}]);
mockApp.factory("mockService", ["$http", "$q", function ($http: ng.IHttpService, $q: ng.IQService) {
return new MockService($http, $q);
}]);
내 테스트 : 내 코드
describe("Mock Controller", function() {
var controller: MockController;
var scope: IMockScope;
var $http: ng.IHttpService;
var $q: ng.IQService;
var mockService: MockService;
var backEnd: ng.IHttpBackendService;
beforeEach(function() {
angular.mock.module("mockApp");
});
beforeEach(angular.mock.inject(function ($rootScope: ng.IRootScopeService, _$http_: ng.IHttpService, _$q_: ng.IQService,
_mockService_: MockService, $httpBackend: ng.IHttpBackendService) {
scope = <IMockScope> $rootScope.$new();
$http = _$http_;
$q = _$q_;
mockService = _mockService_;
backEnd = $httpBackend;
backEnd.when("GET", "/PreEval/GetPromotion").respond(
{
"Success": true,
"ErrorMessage": "",
"Result": [
{ "ContactTypeId": 2, "Name": "Coworker" },
{ "ContactTypeId": 3, "Name": "Family" },
{ "ContactTypeId": 5, "Name": "Fresh" },
{ "ContactTypeId": 1, "Name": "Friend" }
]
});
}));
it("should have data",() => {
controller = new MockController(scope, mockService);
backEnd.flush();
expect(scope.promotion).toBeDefined();
});
});
}
내가 비슷한 질문을보고 시도했지만 아무것도 도왔다. 모든 제안을 부탁드립니다.
완벽합니다. 감사 –