我有一项服务,其中包含大约十几种方法。我正在设置我的第一轮单元测试。这是一个有效的简单示例:
it('should have a working getter/setter for SummaryLayoutBn', function() {
layoutService.setCurrentSummaryLayoutBn('TEST_BN');
summaryLayoutBn = layoutService.getCurrentSummaryLayoutBn();
expect(summaryLayoutBn).toEqual('TEST_BN');
});
然后我使用 $httpBackend 返回一些模拟的 json 数据:
it('should have a working getLayout function', function() {
$httpBackend.expectGET('/b/json/layout/TEST_BN').respond(defaultSystemLayout);
expect(layoutCtrlScope.layoutModel.layout).toBeUndefined();
layoutCtrlScope.loadLayoutFromBn('TEST_BN');
$httpBackend.flush();
expect(layoutCtrlScope.layoutModel.layout).toBe(defaultSystemLayout)
});
这是有效的,但我不再调用我的服务,我正在调用我的控制器中调用该服务的函数。这是正确的方法吗?它允许我测试layoutCtrlScope.layoutModel.layout
,但这感觉像是对控制器的测试。
这是布局服务
getLayout: function (bn) {
utilService.showLoading();
var url = baseUrl.generateUrl(baseUrl.layout, bn);
return $http.get(url).
success(function (data, status, headers, config) {
utilService.hideLoading();
}).
error(function (data, status, headers, config) {
errorHandlingService.handleGenericError(status);
utilService.hideLoading();
});
}
和控制器功能:
$scope.loadLayoutFromBn = function (layoutBn) {
var layout = layoutService.getLayout(layoutBn);
layout.then(function (data) {
$scope.layoutModel.layout = data.data;
});
}