我正在测试一个控制器,它有一个从我的服务器返回一个json对象的方法。我真的很困惑如何对我的方法返回的方式做出预期。
我需要根据结果清理一下我的范围。
我想要完成的是呼叫搜索() - >看看返回的数据 - >如果长度== 0 - >确保我的范围已删除某些值。如何查看我的方法返回的内容?
$scope.clearIds = function(){
//clean out data I don't need anymore
}
$scope.search = function(inputValue, modelname, action, field){
modelname = modelname || 'companies';
action = action || 'search';
field = field || 'title';
return apiResource.query({api_resource:modelname, api_action:action, api_column:field, api_value:inputValue}).$promise.then(function(response){
if(response.data.length === 0){
$scope.clearIds();
}
else{
return response.data;
}
});
}
describe('Controller - TypeaheadSearch', function () {
// load the controller's module
beforeEach(module('app'));
var scope;
var apiResource;
var stateParams;
var q;
var deferred;
var rootScope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope, $q) {
apiResource = {
query: function() {
deferred = $q.defer();
deferred.resolve('bar');
return deferred.promise;
}
};
scope = $rootScope.$new();
stateParams = {};
q = $q;
rootScope = $rootScope;
$controller('TypeaheadSearch', {
$scope: scope,
$stateParams:stateParams,
apiResource: apiResource,
});
}));
it('Should call apiResource:query', function() {
spyOn(apiResource, 'query').and.callThrough();
scope.search();
rootScope.$apply();
expect(apiResource.query).toHaveBeenCalled();
});
});
答案 0 :(得分:0)
为$ scope.clearIds()然后expect(scope.clearIds).toHaveBeenCalled()
创建一个间谍,和/或检查clearIds()
是否具有您想要的效果。
接下来,使用类似于您的代码所期望的数据来解决假承诺。
在您的(it()
)测试中执行此操作,以便您可以看到代码如何响应不同的数据(例如,返回包含其中某些内容的数组)。
deferred.resolve({data: []});