add more specs and fix `listeners` method