如何测试需要服务器的javascript(PouchDB)

How to test javascript (PouchDB) that requires a server

本文关键字:服务器 javascript PouchDB 测试 何测试      更新时间:2023-09-26

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

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

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

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

我想,如果我重新构造它,使我的规格在我的公共文件夹中,这可以工作。但这看起来相当笨拙。我想我也可以在specs文件夹中复制我正在测试的js文件。再说一遍,这看起来相当笨拙。当然,有更好的方法可以做到这一点。

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

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

我得到:

请求处于"已拒绝"状态,显示"output=TypeError:invalid'in'操作数i"

使用"python-m SimpleHTTPServer"在http服务器上尝试相同的代码将正常工作(请求将得到满足)。

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

我不知道你是如何使用PouchDB的(在浏览器PouchDB服务器的Node?上),但你不需要HTTP服务器来运行它。你实际上可以交换任何你想要的后端:CouchDB、LevelDB、IndexedDB或WebSQL。

还有一个内存中的后端可以在Node中使用,我们也在努力将其打造成一个浏览器插件,因此这应该是测试的理想选择。

例如,这是您的HTTP支持包:

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

这是你当地的包:

var db = new PouchDB('myLocalDb');

这是你的内存包(目前只在Node中工作):

var db = new PouchDB('myInMemoryDb', {db: require('memdown')});

这有帮助吗?

我最终以一种半笨拙的方式完成了这项工作。我在公共文件夹中创建了一个指向我想要的资源的符号链接,将它们注入到规范中。然后我可以在规范中运行一个服务器来正确测试pouchDB