better async assertions for Jasmine
We commonly test that some event (eg prop change or click) causes UI to change. Writing async js tests for this is not great.
currently:
it('updates value when prop changes', (done) => {
vm.updatedProp = true;
expect(vm.$el.innerText).toEqual('Loading');
Vue.nextTick(() => { // wait for vm to update
setTimeout(() => { // make test pass most of the time ¯\_(ツ)_/¯
expect(vm.$el.innerText).toEqual('Loaded');
done();
});
});
});
proposal:
it('updates value when prop changes', () => {
vm.updatedProp = true;
expect(vm.$el.innerText).toEqual('Loading');
expect(vm.$el.innerText).eventually.toEqual('Loaded');
});
Not sure if actually possible without done, but something like that is much simpler, and less error prone (e.g. when there are actual timeouts). Syntax is shameless inspired by chai-as-promised
alternatively: if test returns a promise, it is async. I think Jest and Ava do this
Edited by Simon Knox