最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

在nodejs应用程序的实际环境旁边的测试环境

运维笔记admin17浏览0评论

在nodejs应用程序的实际环境旁边的测试环境

在nodejs应用程序的实际环境旁边的测试环境

在我问之前,我经常搜索过很多关于它的文章。但我的问题更深一些。我有一个使用Nodejs Expressjs + MongoDB + Reddit + PM2集群模式+比特币和卡片逃生+ API系统的应用程序。

我的问题是当我在实模式下开发这个应用程序时,它确实非常糟糕。有时我发布代码中的小更新,我按“pm2 log”它显示我在语法或其他方面的一些错误,我尝试修复它并再次发布。在此期间,许多用户的应用程序已关闭。

另外,我不得不说比特币付款,需要真正的测试。需要Blockchain的请求和回复。我怎样才能拥有一个测试环境,我可以测试与实模式完全相同的所有内容,然后如果一切正常,那么将其部署到实模式?

一个易于编码和测试然后易于部署的环境?摩卡可以帮我准确地提供我需要的东西吗?我正在使用PM2群集模式。

回答如下:

你的问题不是一个恰当的问题,而是一层问题,一些基于意见的问题,一些问题太广泛而无法回答。但是,让我们尝试分解它。

陈述的问题是when I'm developing this application in real mode.... I release updates ... it shows me syntax error... application is down。我将阅读它,因为主要问题是您正在开发生产环境。让我们忘记一段时间的实践是多么糟糕,让我们专注于建设性的东西。

让我们定义要采取的粗略步骤。

  1. 现场环境

最紧迫的问题似乎是您在实时应用程序上工作,在开发期间崩溃它意味着为用户崩溃它。让我们来处理。

  • 立即更改所有访问代码,密钥,用户名和密码,以便将它们存储在环境文件中(加密和备份是安全的,但不能在源代码中提交),例如environment-prod.env
  • 然后为您使用的所有服务创建第二组凭据。对于MongoDB,例如这很简单,只需创建一个名为test_database的本地数据库实例。对于Reddit,创建第二个应用程序,例如,将其命名为my-app-test。某些服务可能有一个选项可以在应用程序中创建一组测试凭据,其他服务只需要一个用于测试的应用程序,一个用于生产。
  • 创建一个新的环境文件,例如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分支,在测试时,将其合并回来。然后将其标记为“release-”并部署到生产中。然后如果可能的话自动化所有这些。 )

  1. 测试

Mocha非常适合运行Node / Express应用程序的测试。这是重要的测试。

你说bitcoin payment....Needs request and response。让我们看看如何做到这一点。

  • 添加[nock])(https://www.npmjs/package/nock)到您的应用程序(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('http://reddit/api/submit',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') .get('/resource') .reply(200, testResponse);
  • 为您的所有要求做到这一点。

现在您所拥有的是一个测试设置,以便在您更改代码时,它不应该针对真正的Reddit api或真实支付网关api运行,而是获取您的模拟响应。把它与一些好的断言配对,你应该没事。确保你嘲笑一切。如果添加新类型的请求,请确保记录它们,并将它们添加到您的过程中。

现在,这一切都很模糊。宽。只是一种方法来做到这一点。漫长的过程。可能不是最好的一个。不适合您的具体情况。但它应该让你开始。一步一步地拿走那些东西,如果你遇到困难,请回到Stackoverflow。但是要开始研究它,因为从长远来看,你目前的方法似乎是不可持续的。

发布评论

评论列表(0)

  1. 暂无评论