Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何测试需要服务器的javascript(数据库)_Javascript_Pouchdb - Fatal编程技术网

如何测试需要服务器的javascript(数据库)

如何测试需要服务器的javascript(数据库),javascript,pouchdb,Javascript,Pouchdb,我想在一些使用数据库库的js上编写单元测试。 为了使用PockDB,我需要启动一个简单的HTTP服务器* 我的文件结构是 /public(提供的所有html和js) /规范(我所有的js和ruby规范文件) 如果我在/public文件夹中启动服务器(如rackup),我将无法访问/specs文件夹中的规范(因为/public文件夹将成为web服务器的根目录) 如果我在/specs文件夹中启动rackup,我将无法访问我想在/public文件夹中测试的js文件(因为/specs文件夹将是web服务

我想在一些使用数据库库的js上编写单元测试。 为了使用PockDB,我需要启动一个简单的HTTP服务器*

我的文件结构是 /public(提供的所有html和js) /规范(我所有的js和ruby规范文件)

如果我在/public文件夹中启动服务器(如rackup),我将无法访问/specs文件夹中的规范(因为/public文件夹将成为web服务器的根目录)

如果我在/specs文件夹中启动rackup,我将无法访问我想在/public文件夹中测试的js文件(因为/specs文件夹将是web服务器的根目录)

我想如果我重组它,使我的规格在我的公共文件夹,这可能会工作。但是这看起来很笨拙。我想我也可以在specs文件夹中复制我正在测试的js文件。同样,这看起来很笨重。当然,有更好的方法可以做到这一点

*当我尝试在没有运行简单http服务器的情况下执行以下简单代码时,会出现错误:

var db = new PouchDB('todos');
db.put({_id : '001' });
我得到:

请求处于“已拒绝”状态,操作数i中的“结果=类型错误:无效”


使用“python-msimplehttpserver”在http服务器上尝试相同的代码可以正常工作(请求将得到满足)。

我最终以一种半笨重的方式完成了。我在公用文件夹中创建了一个指向我想要的资源的sym链接,以便将它们注入到规范中。然后,我可以在规范中运行一个服务器来正确测试数据库

为了使用PockDB,我需要启动一个简单的HTTP服务器

我不确定您是如何使用PockDB(在节点上?在浏览器中?PockDB服务器?),但您不需要HTTP服务器来运行它。实际上,您可以交换任何后端:CouchDB、LevelDB、IndexedDB或WebSQL

还有一个内存中的后端,您可以在节点和中使用,所以这应该是测试的理想选择

例如,这是您的HTTP支持邮袋:

var db = new PouchDB('http://localhost:5984/mydb');

这是您当地的邮袋:

var db = new PouchDB('myLocalDb');

这是您的内存袋(目前仅适用于节点):


这有帮助吗?

不幸的是,没有:)我已经添加了关于PockDB如何在这个问题上失败的更多细节。如果我能让PockDB在浏览器中本地工作,那将是理想的。嗯……看来我现在可以不用服务器运行它了。我不知道那笔打字错误的生意一开始发生了什么。但我现在很高兴:我已经给了你答案。
var db = new PouchDB('myInMemoryDb', {db: require('memdown')});