问题描述
限时送ChatGPT账号..我正在尝试对我的各个 Angular 工厂进行单元测试,但在尝试正确模拟和注入 PouchDB 对象时遇到了困难.我的工厂代码目前如下:
I am attempting to unit test my individual Angular factories but am having a hard time trying to correctly mock and inject the PouchDB object. My factory code is currently as follows:
factory('Track', [function() {
var db = new PouchDB('tracks');
var resource = {
getAll: function() {
return db.allDocs({include_docs: true});
}
return resource;
}]);
我曾尝试使用 Angular 的 $provide 服务注入一个模拟 PouchDB 实例,但没有成功:
I had tried to use Angular's $provide service to inject a mock PouchDB instance with no luck:
module(function($provide) {
$provide.value('PouchDB', {
allDocs: function() {
return 'MOCKED';
}
});
我不完全确定从这里开始.任何帮助将不胜感激!
I am not entirely sure where to go from here. Any help would be greatly appreciated!
推荐答案
正如刚刚在评论中所述:您必须将全局变量 PouchDB
包装在服务中以使其可注入.这是因为 Angular 通过简单的函数参数进行 DI.因此,只需执行以下操作:
As just stated in the comments:
you have to wrap the global variable PouchDB
inside a service to make it injectable. This is due to Angular doing DI via simple function-parameters. So just do something like:
angular.module('myModule')
.factory('PouchDBWrapper', function(){
return PouchDB;
}
然后你可以将它注入你的Track factory:
Then you can inject it into your Track factory:
factory('Track', [function(PouchDBWrapper) {
var db = new PouchDBWrapper('tracks');
var resource = {
getAll: function() {
return db.allDocs({include_docs: true});
}
return resource;
}]);
并且在您的测试中,您可以通过以下方式模拟它:
and in your test you can mock it by:
module(function($provide) {
$provide.factory('PouchDBWrapper', {
allDocs: function() {
return 'MOCKED';
}
});
这篇关于单元测试 AngularJS 和 PouchDB 服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
更多推荐
[db:关键词]
发布评论