Currently, every time I develop a feature, I write the corresponding behavior tests using simulacra for our downstream services. These simulacra are mute always serve the same output. I have faced something serious today. My BDDs went into my local environment and construction. Therefore, I went ahead and merged my changes into the "master" branch.
However, when manually testing the feature in my development environment, I discovered a bug. One of the downstream services was responding with a 4xx. I know it's bad – the master branch now contains a feature that is problematic.
If I had written an integration test using real services and it was part of my build, this problem would have been solved. But let's say that if one of the downs goes down, my build will not go away. I do not want that.
Note that we do not have a QA branch because we do not have a separate QA tester. We are all supposed to test our features on our own.
How should I mitigate this problem?