【发布时间】:2015-08-25 17:06:24
【问题描述】:
这是我的控制器中的功能之一
function sendMeetingInvitation(companyId, meetingId) {
meetingService.sendInvitations(companyId, meetingId)
.success(function() {
$state.go('company.meeting.view', {}, {
reload: true
});
})
.error(function() {
//more code for error handling
});
}
下面是我在调用sendMeetingInvitation()时用来测试的测试用例,是否应该调用meetingService.sendInvitations的服务调用的success()块
describe('EditMeetingCtrl.sendMeetingInvitation()', function() {
var $rootScope, scope, $controller, $q, companyService, meetingService;
var mockedHttpPromise = {
success: function() {}
};
beforeEach(angular.mock.module('MyApp'));
beforeEach(angular.mock.inject(function(_$httpBackend_, _companyService_, _meetingService_) {
$httpBackend = _$httpBackend_;
companyService = _companyService_;
meetingService = _meetingService_;
}));
beforeEach(inject(function($rootScope, $controller, _meetingService_) {
scope = $rootScope.$new();
createController = function() {
return $controller('EditMeetingCtrl', {
$scope: scope,
meeting: {},
meetingService: _meetingService_
});
};
var controller = new createController();
}));
it("should should send invitations", function() {
spyOn(meetingService, 'sendInvitations').and.returnValue(mockedHttpPromise);
scope.sendMeetingInvitations(123456, 123456);
expect(meetingService.sendInvitations).toHaveBeenCalledWith(123456, 123456);
});
});
我收到了这个错误,它并没有什么帮助。
PhantomJS 1.9.8 (Windows 8) In EditMeetingCtrl EditMeetingCtrl.sendMeetingInvitation() should should send invitations FAILED
TypeError: 'undefined' is not an object (near '...})...')
我在这里做错了什么?我试过我的mockedHttpPromise 来关注。但结果相同
var mockedHttpPromise = {
success: function() {},
error: function() {}
};
【问题讨论】:
-
我遇到了同样的问题,我的成功运行良好,但它与 .error 的链接是未定义的。我通过不依赖控制器中的 success().error() 并切换到仅使用 .then () 解决了这个问题
-
嗨@Malik 运气好吗?请让我知道我也面临同样的问题。更改要使用的代码对我来说不是一个选项,因为源代码是由其他团队开发的,无法更改。
标签: angularjs unit-testing jasmine karma-runner karma-jasmine