feat(views): add custom event WebChannel, add NullChannel

There is a subtle problem here - we are not sure the callback is ever called. Maybe use `done` or set a variable like `isCallbackInvoked = true;` and test for that when you test whether the event was dispatched.