code: def test_feature_union(caplog, named_steps):
      pipe_w_default_log_callback = DebugPipeline(
          named_steps, log_callback="default"
      )
      pipe_w_custom_log_callback = DebugPipeline(
          named_steps, log_callback=custom_log_callback
      )
  
      pipe_union = FeatureUnion(
          [
              (
                  "pipe_w_default_log_callback",
                  pipe_w_default_log_callback,
              ),
              (
                  "pipe_w_custom_log_callback",
                  pipe_w_custom_log_callback,
              ),
          ]
      )
  
      caplog.clear()
      with caplog.at_level(logging.INFO):
          pipe_union.fit(IRIS.data, IRIS.target)
      assert caplog.text, f"Log should be none empty: {caplog.text}"
      for pipe in [
          pipe_w_default_log_callback,
          pipe_w_custom_log_callback,
      ]:
          for _, step in pipe.steps[:-1]:
              assert (
                  str(step) in caplog.text
              ), f"{step} should be in: {caplog.text}"
              assert (
                  caplog.text.count(str(step)) == 2
              ), f"{step} should be once in {caplog.text}"
  
imports: import logging
  import pytest
  from sklearn import datasets
  from sklearn.base import BaseEstimator, TransformerMixin
  from sklearn.model_selection import GridSearchCV
  from sklearn.multiclass import OneVsOneClassifier, OneVsRestClassifier, OutputCodeClassifier
  from sklearn.pipeline import FeatureUnion
  from sklearn.preprocessing import StandardScaler
  from sklearn.svm import LinearSVC
  from sklego.pipeline import DebugPipeline, make_debug_pipeline
label_desc: Use image node_id 11 for calling a global function with example usage: test_feature_union(caplog, named_steps) without return types