BREAKING: USPS slashes address verification to 60 addresses/hour. What now?
Smarty

Your Convey needs more focus

Smarty header pin graphic
Updated July 2, 2025
Tags
Smarty header pin graphic

One of the great benefits of TDD/BDD is that you usually don't have to spend much, if any time at all in a debugger. To enter a debugger is to admit a loss of control over the system under test. Even so, there are times when you do need to debug something, even if you're maintaining the discipline.

Lately, most of my coding is in GoLang. Coming from using an IDE almost exclusively to write Python (using PyCharm) and C# (using VS and ReSharper), and knowing how great the visual debugging tools are it's hard to fathom using a console-based debugger for GoLang code. Yes, I know about godbg, which is an amazing tool, but I would rather stay in my test runner of choice, which is GoConvey.

Up until now I would do something like this to achieve debugging:

  • Add log.Println statements where the bugs are
  • Use SkipConvey to limit execution to the test in question (this can get tedious if the test suite is large)
  • Run the tests and observe the output

Or...

  • Add the logging statements
  • Use an init function in the test code to substitute a nil writer to the logger
  • Substitute stdout in the Convey scope that executes the code with logging
  • run the tests and observe the output

Yuck.

Now, there's a better way. It still means putting in some logging, which may or may not be temporary. But, all you have to do now is something like this:

FocusConvey("Subject: Integer incrementation and decrementation", t, func() {
	var x int

	FocusConvey("Given a starting integer value", func() {
		x = 42

		FocusConvey("When incremented", func() {
			x++

			Convey("The value should be greater by one", func() {
				So(x, ShouldEqual, 43)
			})
			FocusConvey("The value should NOT be what it used to be", func() {
				So(x, ShouldNotEqual, 42)
			})
		})
		Convey("When decremented", func() {
			x--

			Convey("The value should be lesser by one", func() {
				So(x, ShouldEqual, 41)
			})
			Convey("The value should NOT be what it used to be", func() {
				So(x, ShouldNotEqual, 42)
			})
		})
		Reset(func() {
			x = 0
		})
	})
})

In this code, only those scopes declared with FocusConvey will be executed, the reset will be ignored. Much easier to toggle for debugging purposes.

Of course, you shouldn't leave the test suite with a bunch of FocusConvey calls lying around. After you fix your code get rid of the Focus and just keep Convey.

Happy debugging!

Subscribe to our blog!
Learn more about RSS feeds here.
Read our recent posts
Christmas traditions around Smarty
Arrow Icon
Around the world, people celebrate Christmas in all kinds of ways. In Iceland, it’s tradition to read books by candlelight on Christmas Eve. Christmas firework shows are a staple in El Salvador. Families in Australia often spend Christmas Day playing cricket. At Smarty, we keep the season bright with a few traditions of our own. From wacky holiday decorating to gingerbread house competitions, we love taking the holidays to the next level. So stick around; things are about to get festive. Our favorite Christmas traditions are:Seasonal service projectsUpside-down holiday decorUgly Sweater DayThe Great Gingerbread House Bake OffAddy the Address ElfYuletide karaokeLetters to SantaGift-wrapping extravaganzaSeasonal service projectsWe like to celebrate the season of giving by giving back! This year, we participated in United Way's Sub for Santa program, where families—or Smartys 😉—sub in for Santa by donating gifts to local families in need.
Accessibility best practices at Smarty
Arrow Icon
An enterprise-level customer of Smarty’s recently shared how impressed they were with our accessibility-first approach, inquiring about how we designed our tools to function in a way that feels equitable and usable for everyone. At Smarty, one of our core values is outwardness — seeing people as people, not objects or caricatures. Every person who interacts with our tools has their own needs, wants, and objectives, and accessibility is one of the most meaningful ways we connect with people - an area we’re striving to improve.
Introducing Smarty’s mascot… Hermes?
Arrow Icon
Greek gods, as it turns out, have a lot to say to the mortals on Earth and the souls in Hades. What they don’t have is time to travel from Olympus all the way to Earth or Hades just to tell a mere mortal to perform 12 labors… or eat a magical herb… or free Odysseus. That’s why the gods have a personal messenger: Hermes. Equipped with winged sandals, Hermes travels between Olympus, Earth, and the underworld with lightning speed (Get it? Lightning? Because his dad is Zeus? 🤣)Smarty also knows a thing or two about outrageous speed, and that’s not where our similarities with Hermes end.

Ready to get started?