временная ошибка при написании теста для рабочего процесса, вызывающего дочерний рабочий процесс: «не удалось найти тип рабочего процесса»

# #go #testing #temporal #temporal-workflow

Вопрос:

Я использую SDK golang для временного. Я пишу тест для своего рабочего LoadCreateWorkflow процесса . Он имеет одно действие, а также запускает дочерний рабочий LoadLifecycleWorkflow процесс .

При написании модульного теста для него я имитирую действие и дочерний рабочий процесс LoadLifecycleWorkflow :

     s.env.OnActivity(CreateLoadActivity, mock.Anything, mock.Anything).Return(nil, nil).Once()
    s.env.OnWorkflow(LoadLifecycleWorkflow, mock.Anything).Return(nil)
    s.env.ExecuteWorkflow(LoadCreateWorkflow, wfParams)
 

(здесь s.env-это модульный тест TestWorkflowEnvironment ):

 import (
    ...
    "go.temporal.io/sdk/testsuite"
)

type UnitTestSuite struct {
    suite.Suite
    testsuite.WorkflowTestSuite

    env *testsuite.TestWorkflowEnvironment
}

func (s *UnitTestSuite) SetupTest() {
    s.env = s.NewTestWorkflowEnvironment()
}
 

При запуске моего теста я получаю ошибку: panic: unable to find workflow type: LoadLifecycleWorkflow. Supported types: [LoadCreateWorkflow]

В функции инициализации моего модуля рабочего процесса я регистрирую как его, так и дочерний рабочий процесс:

 worker.RegisterWorkflow(LoadCreateWorkflow)
worker.RegisterActivity(CreateLoadActivity)
worker.RegisterWorkflow(LoadLifecycleWorkflow)
 

Почему я получаю сообщение об ошибке, что мой LoadLifecycleWorkflow не зарегистрирован, и как это исправить?

Ответ №1:

Дочерний рабочий процесс должен быть зарегистрирован во временной TestWorkflowEnvironment :

s.env.RegisterWorkflow(LoadLifecycleWorkflow)

Среда рабочего процесса тестирования-это другая среда, которая используется только для написания тестов, поэтому все дочерние рабочие процессы, которые, как вы ожидаете, ваш рабочий процесс вызовет в тесте, должны быть зарегистрированы в этой среде.