You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: watcher_test.go
    path of file: ./repos/docker-ce/components/cli/cli/command/stack/kubernetes
    
    the code of the file until where you have to start completion: package kubernetes

import (
	"testing"

	apiv1beta1 "github.com/docker/compose-on-kubernetes/api/compose/v1beta1"
	composelabels "github.com/docker/compose-on-kubernetes/api/labels"
	"gotest.tools/v3/assert"
	apiv1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/labels"
	"k8s.io/apimachinery/pkg/runtime"
	"k8s.io/apimachinery/pkg/runtime/schema"
	"k8s.io/apimachinery/pkg/runtime/serializer"
	"k8s.io/apimachinery/pkg/watch"
	k8stesting "k8s.io/client-go/testing"
)

var podsResou
    
func TestDeployReconcileFailure(t *testing.T) {
	stack := apiv1beta1.Stack{
		ObjectMeta: metav1.ObjectMeta{Name: "test-stack", Namespace: "test-ns"},
	}

	serviceNames := []string{"svc1", "svc2"}
	testRepo := newTestPodAndStackRepository(nil, []apiv1beta1.Stack{stack}, nil, func(action k8stesting.Action) (handled bool, ret watch.Interface, err error) {
		res := watch.NewFake()
		go func() {
			sfailed := stack
			sfailed.Status = apiv1beta1.StackStatus{
				Phase:   apiv1beta1.StackFailure,
				Message: "test error",
			}
			res.Modify(&sfailed)
		}()

		return true, res, nil
	})

	testee := &deployWatcher{
		stacks: testRepo.stackListWatchForNamespace("test-ns"),
		pods:   testRepo.podListWatchForNamespace("test-ns"),
	}

	statusUpdates := make(chan serviceStatus)
	go func() {
		for range statusUpdates {
		}
	}()
	defer close(statusUpdates)
	err := testee.Watch(stack.Name, serviceNames, statusUpdates)
	assert.ErrorContains(t, err, "Failure: test error")
}