You say it is too easy to fail:
for (i = 0; i < observers.length; ++i) {
It is tempting to think about it, but consider this common mistake:
for (i = 0; i <= observers.length; ++i) {
Or this one:
for (i = 0; i < observers.length; ++j) {
Or perhaps observers are not added correctly. Or ... or ... or ...
If you already have tests, it seems that there is no need to delete them, and one axiom of software is functions that grow over time, so now simple things may be less so straightforward that your tests should help you.
Tj crowder
source share