assertIsString($js); // 复制失败时应优先 toastError(alert 作为降级) // 允许通过 wrapper(toastCopyFailed)间接调用 toastError。 $this->assertTrue( str_contains($js, "toastError('复制失败") || str_contains($js, 'toastCopyFailed('), 'copy failures should use toastError (directly or via toastCopyFailed wrapper)' ); } }