在我问之前,我经常搜索过很多关于它的文章。但我的问题更深一些。 我有一个应用程序使用 Nodejs Expressjs + MongoDB + Reddit + PM2集群模式+比特币和卡片逃生+ API系统。
我的问题是当我在实模式下开发这个应用程序时,它确实非常糟糕。有时我会在代码中发布很少的更新,然后按“ pm2 log ”它会在语法或其他方面显示一些错误,我会尝试修复它并再次发布。在此期间,许多用户的应用程序已关闭。
另外,我不得不说比特币付款,需要真正的测试。需要Blockchain的请求和回复。我怎样才能拥有一个测试环境,我可以测试与实模式完全相同的所有内容,然后如果一切正常,那么将其部署到实模式?
易于编码和测试然后易于部署的环境?摩卡可以帮我准确地提供我需要的东西吗?我正在使用PM2群集模式。
答案 0 :(得分:0)
你的问题不是一个恰当的问题,而是一层问题,一些基于意见的问题,一些问题太广泛而无法回答。但是,让我们尝试将其分解。
陈述的问题是when I'm developing this application in real mode.... I release updates ... it shows me syntax error... application is down
。我将阅读它,因为主要问题是您在生产环境中进行开发。让我们暂时忘记这种做法是多么糟糕,让我们专注于建设性的事情。
让我们来定义要采取的粗略步骤。
最迫切的问题似乎是你在使用实时应用程序,在开发期间崩溃意味着它也会为你的用户崩溃。让我们来处理。
environment-prod.env
。< / LI>
test-environment.env
,包含所有相同的密钥(例如REDDIT_APPID,REDDIT_SECRET,MONGODB_URL,BLOCKCHAIN_GATEWAY_KEY等),但是新值。现在,有一个,你有一个测试环境。制作别名,例如alias dev="cd $HOME/projects/my-reddit-bitcoin-app && source test-environment.env"
。每天你来应用这个应用程序,输入dev
,然后你可以启动pm2等,并在开发环境中安全地工作。您的用户永远不会看到您的崩溃。
只有当您确定已完成新功能或错误修复时,请切换环境(source environment-production.env
),然后将新应用部署到运行它的服务器,并重新启动pm2或任何用于这些部署。在重新处理代码之前立即切换回测试环境。
详细了解如何分离测试/产品环境。阅读一下git工作流程(例如,将最新的master分支到功能分支或bugfix分支,测试时将其合并。然后标记它&#34; release - &#34;并部署到生产中。然后去如果可能的话,自动完成所有这些。)
Mocha非常适合运行Node / Express应用程序的测试。这是重要的测试。
你说bitcoin payment....Needs request and response
。让我们看看如何做到这一点。
npm i -D nock
)。导入它并将其放在测试文件的顶部。例如。在some-test.spec.js文件的顶部:
const nock = require('nock')
开始记录请求,例如将其添加到应用中的before()
块中:
describe('My tests', function () {
before(function () {
nock.recorder.rec();
});
// ... tests
现在,一次运行一个测试(例如,从您的应用程序编写一个执行特定任务的测试)并检查控制台中的内容。例如。如果你发出请求(request.post(&#39; http://reddit.com/api/submit&#39;,jsonData)),你会看到nock在控制台中打印确切的响应(采用JSON格式),作为测试运行。将其复制到测试文件中,例如把它放在底部:
var testResponse = <whatever was in the console in json format. Or string, whatever>. // homework is to find out why var and not const, if this is at the end of the file.
现在停止录音机(注释掉),在实际测试中,改为运行:
const pipe = nock('http://www.example.com')
.get('/resource')
.reply(200, testResponse);
为您的所有请求执行此操作。
现在您所拥有的是一个测试设置,以便在您更改代码时,它不应该针对真正的Reddit api或真实支付网关api运行,而是获取您的模拟响应。把它与一些好的断言配对,你应该没事。确保你嘲笑一切。如果添加新类型的请求,请务必记录它们,并将它们添加到您的过程中。
现在,这一切都很模糊。宽。只是一种方法来做到这一点。漫长的过程。可能不是最好的一个。不适合您的具体情况。但它应该让你开始。一步一步地拿走那些东西,如果你遇到困难,请回到Stackoverflow。但是要开始研究它,因为从长远来看,你目前的方法似乎是不可持续的。