How can I manage the versions of cookbooks used when testing changes in UAT environments?

How can I manage the versions of cookbooks used when testing changes in UAT environments? We currently use chef server to store the config for what versions of cookbooks to use for a particular node. So when testing changes, we update the cookbook version to something like 99.99.99 so it doesn’t conflict with any “real” version. Is there a better way?

Are you a berks user or a policyfile user?
Sounds like berks, policyfiles should help fix this

We’re planning moving to Berks soon (within a few weeks).

Bump your cookbook version and pin its version by environment, once it’s out of UAT, promote the new version to Qa then rehearsal and finally to prod by environment bump?

Using Policyfile, some of our teams will create a Policyfile archive (chef install; chef export -a) from the workstation, copy it to a test system, and run it with chef --local-mode. At this point no cookbooks are committed to version control so versions don’t matter. I think chef-run automates these steps, but I haven’t used that feature yet.