写作(单位)测试动作,开玩笑的分子事件
#node #microservices #jest #moleculer

1.前言

分子是NODEJS强大的微服务框架。由于由微服务架构师设计,我们有多项服务负责其职责。为了与其他节点进行通信,我们可以配置TCP,NATS,REDIS Transporter,MQTT,AMQP和KAFKA等运输者,或自定义它们适合您的业务。

除了设计功能以与其他节点交互时,我们需要为每个功能编写unitest,其中内部功能。它的一个方面,我们还需要编写Unitest以进行操作呼叫。在这篇文章中,我将介绍一些在这种情况下写Unitest的方法。

注意:请在阅读此帖子之前阅读有关经纪人,运输者,动作,事件概念的信息。

Moleculer

2.了解动作,分子中的事件

在现实世界中,如果我们每个人都代表一项服务,那么动作看起来就像您需要的请求。但是我们有两种案件可以要求一些东西。首先,我们从他人那里要求一些东西,并希望结果。其次,我们要求他人,我们不需要或关心他们的回应。
我有两个易于理解的示例:

  • 鲍勃(Bob)上市,并告诉收银员:“我想买一个苹果”。收银员检查他们的股票并将其出售给鲍勃或告诉他股票缺货。鲍勃将从收银员那里得到回应。这是分子作用的机制。
  • 鲍勃的垃圾已经满了,所以他将它们留在垃圾桶里,他不需要知道何时将其取出或如何处理垃圾。他只是离开它,然后回到工作。这是分子框架中事件的麦克汉尼斯。

Simulation image for communicate

3.如何测试行动,事件

让我们加入主要内容。不同于对整体体系结构进行测试,每个服务都可以位于另一台服务器上,并通过Transporter致电另一个服务。

在原始文档中,该示例已经测试了动作调用的事件。基于分子测试文档,我有基本的实施测试措施,该操作调用了另一种操作,该操作以3个步骤:

  • 模拟服务经纪人。
  • 创建两个服务(我们可以加载/创建/导入或创建新服务并将测试操作设置为此服务)。

好吧,让我们概述代码...

describe("Testing calling actions", () => {
    // Mock service broker
    let broker = new ServiceBroker({ logger: false });

    // set start and stop service 
    beforeAll(() => broker.start());
    afterAll(() => broker.stop());

    // create bob service
    broker.createService({
      name: "bob-service",
      actions: {
        goToMarket(ctx) {
          const buyAppleResponse = ctx.call("cashier-service.sellApple");
          return buyAppleResponse;
        }
      }
    })

    // create cashier service
    broker.createService({
      name: "cashier-service",
      actions: {
        sellApple(ctx) {
          const isAvailableApple = true;
          return isAvailableApple;
        }
      }
    })

    // process test
    describe("Test bob buy apple", () => {
      it("should calling to another action", async () => {
        const viewBobGoToMarket = await broker.call("bob-service.goToMarket");
        console.log(viewBobGoToMarket);
      })
    })
})

逻辑:

  • 首先,我想嘲笑一个服务经纪人来创建一个单个环境来运行我们的测试。
  • 接下来,我重建了与鲍勃和收银员相对应的两个服务,还为每种服务创建行动。
  • 通过服务经纪人的处理通话服务以确保其工作。

您可以想象上面的交流:

communication simulation

当我们用事件替换调用的动作时,我们将不会有回复,因为我们不在乎结果或呼叫事件是否丢失。

Event simulation

测试操作的另一种方法是仅获取我们需要测试和模拟所有操作,事件,呼叫数据库的操作。该解决方案取决于您的样式,业务逻辑或使用上下文。

4。结论

当我尝试使用模拟操作测试操作时,这是一个单元示例。当我们替换事件时,这是类似的。我认为这很简单,希望它易于理解。我是微服务和分子框架的新野外,如果我有任何缺点,请给我评论。

跟着我,如果你很有趣,请给我你的心
感谢您阅读ð

5.参考