'1', 'endoscopeName' => '测试胃镜', 'cardNo' => '04A2AD88D0', 'readerNo' => '09E45F217B', 'readerType' => '', 'currentStep' => '', 'processType' => '', 'needMorningWash' => false, 'morningWashed' => false, // 默认未完成晨洗,由具体测试覆盖 'todayWashRecords' => 0, ]; return ProcessContext::create(array_merge($defaults, $data)); } /** * 断言流程执行成功 */ protected function assertSuccess(ProcessContext $context): void { $this->assertTrue($context->success, '流程执行失败: ' . $context->errorMessage); } /** * 断言流程执行失败 */ protected function assertFailure(ProcessContext $context, string $expectedMessage = ''): void { $this->assertFalse($context->success, '期望流程执行失败,但成功了'); if ($expectedMessage) { $this->assertStringContainsString($expectedMessage, $context->errorMessage); } } /** * 断言当前步骤 */ protected function assertStep(ProcessContext $context, string $expectedStep): void { $this->assertEquals($expectedStep, $context->currentStep, "期望当前步骤为 {$expectedStep},实际是 {$context->currentStep}"); } /** * 断言语音内容 */ protected function assertVoiceContains(ProcessContext $context, string $expectedText): void { $this->assertStringContainsString($expectedText, $context->voiceMessage, "语音内容应包含 '{$expectedText}'"); } /** * 设置步骤时间(用于时间验证测试) */ protected function setStepTime(ProcessContext $context, string $stepCode, int $secondsAgo): void { $time = date('Y-m-d H:i:s', time() - $secondsAgo); $context->setStepLastTime($stepCode, $time); } }