我有这样的服务。
这只是一个http get请求。
angular.module('myApp').service('TESTService', ['$http',
function($http) {
var request = function(url) {
return $http({
method: 'GET',
url: url
});
};
return {
get: function(url) {
return request(url);
}
};
}
]);
在我的控制器中,我已经调用了服务
TESTService.get('/api/product' + id).success(
function(result) {
console.log(result)
}
);
我需要为它编写单元测试
describe('test here', function () {
var testCtrl, scope, httpBackend, testService;
// Initialize the controller and a mock scope
beforeEach(inject(function (_$controller_, _$rootScope_, _$httpBackend_, _TESTService_) {
scope = _$rootScope_.$new();
httpBackend = _$httpBackend_;
testService = _TESTService_;
testCtrl = _$controller_('testCtrl', {
$scope: scope
});
it('should return http data', function() {
var productData = {
data: [
{
obj: {
id:'123'
}
}
]
}
httpBackend.expectGET('/api/product/' + id).respond(productData);
TESTService.get('/api/product/' + id).
then(function(data) {
var result = data;
})
httpBackend.flush();
expect(result).toEqual(productData)
});
}));
运行测试后,我得到了
Error: Unexpected request: GET /api/product/undefined
如何编写测试以确保测试通过?有任何想法吗?非常感谢!
答案 0 :(得分:1)
你的变量" id"似乎未定义。如果你投入
var id = 123;
在此之前:
httpBackend.expectGET('/api/product/' + id).respond(productData);
它会调用/ api / product / 123。
所以也许你一开始就在寻找这个:
httpBackend.expectGET('/api/product/' + productData.data[0].obj.id).respond(productData);
TESTService.get('/api/product/' + productData.data[0].obj.id).
等等......希望它有所帮助!
答案 1 :(得分:0)
尝试在传递给$ http的对象周围放置单引号,即$ http({method:'GET','url',url});
angular.module('myApp').service('TESTService', ['$http',
function($http) {
var request = function(url) {
return $http({
method: 'GET',
'url': url
});
};
return {
get: function(url) {
return request(url);
}
};
}
]);