我的单元测试有一个奇怪的问题。 在控制器中我有类似
的东西testFactory.testFunction($scope.id)
.then(function(returnData) {
// do something with the return
})
工厂档案
test.testFunction = function(id) {
return $http.get('/api/v.10/book/' + id + '/books');
};
单元测试
var books = {data: {id: 333, name: 'my book'}};
beforeEach(inject(function (_$controller_, _$httpBackend_, _$rootScope_, _testFactory_) {
scope = _$rootScope_.$new();
$httpBackend = _$httpBackend_;
testFactory = _testFactory_;
testCtrl = _$controller_('testCtrl', {
$scope: scope
});
$httpBackend.whenGET('/api/v.10/book/333/books').respond(books);
}));
it('should check if test runs', function() {
testFactory.testFunction(333).then(function(returnData){
console.log(returnData)
})
$httpBackend.flush();
})
出于某种原因,'returnData'的console.log将'books'变量添加到对象中,并将标题,状态等添加到响应中。
例如:
Object{data: Object{data: Object{id: ..., name: ...}},
status: 200, headers: function (name) { ... },
transformResponse: [...],
url: '/api/v.10/book/333/books', statusText: ''}
我只是期待
{data: {id: 333, name: 'my book''}}
作为我的回复。
有人可以帮我解决这个问题吗?
非常感谢!
答案 0 :(得分:1)
将respond
与单个参数一起使用时,它应该是您希望返回到您的网络服务的数据对象as shown under when
in the docs。因此,您需要将books
变量更改为{id: 333, name: 'my book'}
。