我有一个小节点应用程序,要针对它运行一些浏览器测试。
我想知道最好的方法是什么。
首先,我正在考虑将所有内容放入package.json
中,但我看不到如何启动docker-compose,运行测试并杀死docker-compose。
例如,我会做类似的事情:
"scripts": {
"test": "docker-compose up && mocha --ui tdd test/**/*.test.js --reporter spec && docker-compose down
但是我不确定这是否可能。
如今使用什么来完成此任务? 预先感谢。
欢呼声
答案 0 :(得分:0)
您似乎遇到了一个同步问题,即您的测试在测试夹具到达可用服务点之前尝试访问服务。 (例如,它可能类似于带有HTTP服务器的节点应用程序,用于侦听API请求。)
执行docker-compose up -d
时,docker-compose进程将在其中的容器化服务创建其套接字并开始监听连接之前退出。这意味着如果接下来要做的是运行测试以尝试打开与docker-compose启动的服务的连接,则存在竞争状态,该服务可能尚不可用。
您必须进行测试,以便当它尝试打开连接时,如果遇到超时,则它将重试几次(留出足够的时间并重试,以使容器达到其正在侦听的状态并准备在放弃之前处理请求。)
通常,您只能拥有一个简单的独立应用程序,该应用程序会反复尝试打开服务端口,并在成功时返回成功(或在超时时返回最大错误,然后重试)。在运行测试之前插入此代码,以确保您的服务已达到侦听状态。
我强烈建议您阅读Docker Compose: Wait for Dependencies
该文章描述了一个不错的docker-image,您可以使用它来反复尝试打开TCP端口,直到成功为止。您可以使用它将测试与测试所需的测试夹具服务同步。