While trying out sequelize, I was TDD’ing some code using mocha and reached this error from mocha while watching a test fail:
Error: global leak detected: columnTypes
So I looked through the code and found https://github.com/sequelize/sequelize/blob/f16f39221d9f3be64d7fd58235d5420eba4e10be/lib/dialects/sqlite/query.js#L38 which certainly looks like it would be a global leak, since the code is referring to “this” inside of an anonymous function.
However, inside the sequelize tests, “this” was referring to some sort of representation of the query, likely due to an “apply” or “call” somewhere. Some time later, I just tried to get the test to pass, and once I sync()ed the table and added some columns to the model, it did.
Long story short: that is the error that you get when:
- the table does not exist
- the model does not have any attributes
TL;DR : stub out your random source to avoid sporadic failures
I wrote a spec that ensured that a given input was randomized. It passed the vast majority of the time, but failed occasionally. This bothered me greatly after a day of having it randomly pop up, so I spent some time trying to fix it.
I tried increasing the amount of input, thinking that the odds that a combination of 25 items would be the same are very slim; it would still fail sporadically, but not nearly so often. I would get irritated less.
Of course, increasing the amount of input made no difference (other than maybe making the spec slower.)
Solution: stub out the random source to always return a given output. Now I can get the test to fail or pass consistently, as I like.
And yes, this sort of a “well, duh.”