I think you may be missing something, or asking for a logical impossiblity. Functionally, there are two ways of doing the merges from "unstable" to "testing". Either you can merge in only the code associated with a given "done" story, or you can merge everything from unstable to testing when a story is finished.
These have advantages and disadvantages. The advantage of the first is that things only end up on the testing branch when they're complete, so you don't have parts of incomplete stories outside of unstable. The disadvantage is that the parts that you merge may depend on parts that you didn't merge, so the merge isn't just a simple copy. Alternately, the advantage of the second is that merging is trivial (just a copy, no thought required), but you end up with incomplete things in testing.
Functionally, in some ways the first option is like having different feature branches except they're all in the same tree. You still have to have some way of tracking what code is part of what "story", and you have to disentangle the various pieces in order to merge some particular bits of it into testing, and you have the problems of interdependencies and so forth as a result of that disentangling. As a result, this merging policy may not actually get you very many of the benefits of Continuous Integration -- but, in some situations, it may be a good tradeoff, and preserve some benefits of Continuous Building that are more valuable to your project.
On the other hand, it sounds like a fair part of the point of Continuous Integration is that things are continuously being integrated into the main trunk, rather than only being integrated when they're "complete". Thus, if you're thoroughly buying into that philosophy, it seems to me that having incomplete things in your testing branch is the expected situation -- it's inherent in the philosophy of the system.
It's worth noting, though, that Debian et al are functionally following the first approach; things are only merged from one stage to the other in a piecemeal fashion when they're complete at some level. To some extent, things can be simplified by only merging code-entangled "stories" together when all of them are complete, but there is a lot of work in "backporting" patches in order to merge things from one level to the other. Although the idea of having a three-level unstable/testing/stable structure seems useful for Continuous Integration, I don't think much of Debian's policies beyond that will carry over if you're using the merge-everything philosophy.