【发布时间】:2014-09-25 16:34:16
【问题描述】:
我正在使用 yoeman、grunt、angular、grunt-jasmine、karma、elasticsearch 实现一个应用程序。我需要为我的自定义服务(名称为 elasticSearchService)编写一个测试,该服务调用 elasticsearch(elasticsearch.angular.js)来搜索某些内容并返回一个 promise,但我无法模拟该 elasticsearch(esFactory)对象。
packages.json
"karma-jasmine": "^0.1.5",
"karma-phantomjs-launcher": "^0.1.4",
bower.json
"elasticsearch": "~2.4.1",
我的服务
angular
.module('tagsearchFrontendApp')
.factory('elasticSearchService', ['$q', 'esFactory',
function ($q, esFactory) {
var client = esFactory({
host: 'localhost:9200'
});
var search = function (term, offset) {
var deferred = $q.defer();
var query = {
'match': {
'_all': term
}
};
client.search({
'index': 'recipes',
'type': 'recipe',
'body': {
'size': 10,
'from': (offset || 0) * 10,
'query': query
}
}).then(function (result) {
console.log(result);
var ii = 0,
hits_in, hits_out = [];
hits_in = (result.hits || {}).hits || [];
for (; ii < hits_in.length; ii++) {
hits_out.push(hits_in[ii]);
}
deferred.resolve(hits_out);
}, deferred.reject);
return deferred.promise;
};
....
我的测试
describe('elasticSearchService test', function () {
var _elasticSearchService, rootScope, q;
beforeEach(module('tagsearchFrontendApp'));
beforeEach(inject(['$q', '$rootScope', 'esFactory', 'elasticSearchService', function ($q, $rootScope, esFactory, elasticSearchService) {
_elasticSearchService = elasticSearchService;
rootScope = $rootScope;
q = $q;
spyOn(esFactory, "search").andCallFake(function () {
console.log("elasticsearch: fake search");
var deferred = $q.defer();
deferred.resolve('The fake search resolve');
console.log(deferred.promise);
return deferred.promise;
});
}]));
it('search okay', function () {
_elasticSearchService.search('Developer', 1).then(function(){
...
});
});
});
执行“grunt test”后,出现错误消息“search() 方法不存在”,尽管我的应用程序使用 elasicsearch 工厂运行搜索功能正常。你能帮我解决这个错误吗?
【问题讨论】:
-
您的意思是监视 _elasticSearchService 而不是 esFactory?你能发布确切的错误信息吗?
-
不,我的意思是监视 esFactory,因为我的服务 (elasticSearchService) 注入 esFactory(来自 elasticsearch.angular.js)并调用它的搜索功能。错误消息是“search() 方法不存在”
标签: angularjs unit-testing elasticsearch jasmine karma-runner