testing - 测试时如何嵌套Vue.nextTick?

标签 testing vue.js karma-runner

我正在尝试测试我的应用程序在连续两次 tick 上发生的情况。这是我目前所拥有的(测试在 karma devtools 中失败,但在命令行中失败):

import { mount } from 'avoriaz';
import MyComponent from './MyComponent';

describe('testing', function() {
  it('should do something', (done) => {
    const wrapper = mount(MyComponent, { store });
    wrapper.vm.changeData();
    Vue.nextTick(() => {
      expect(wrapper.vm.something).to.eql(somethingElse);
      wrapper.vm.changeData();
      Vue.nextTick(() => {
        expect(wrapper.vm.something2).to.eql(somethingElse2);
        done();
      });
      done();
    });
  });
});

我也尝试过使用 then()catch(),但 karma 仍然认为我失败的测试通过了。

我应该只调用一次 done() 吗?我不太确定这个回调在做什么。

最佳答案

如图所示here ,还有一个更好的解决方案,可以防止 Error: Timeout of 2000ms exceeded。对于异步测试和 Hook ,确保调用“done()”;如果返回一个 Promise,请确保它已解析。:

it('should do something', (done) => {
  const wrapper = mount(MyComponent, { store });
  wrapper.vm.changeData();
  Vue.nextTick(() => {
    expect(wrapper.vm.something).to.eql(somethingElse);
    wrapper.vm.changeData();
    Vue.nextTick().then(() => {
      expect(wrapper.vm.something2).to.eql(somethingElse2);
    }).then(done, done);
  });
});

我也想使用 async/await 版本,但我无法让它工作。

关于testing - 测试时如何嵌套Vue.nextTick?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44442757/

相关文章:

python - 测试功能的正确方法

unit-testing - 我们应该在 CakePHP 上测试添加/编辑/删除吗?

javascript - 一个失败的测试会导致其他异步测试失败

angular - Karma 以什么顺序运行测试?

flutter test enterText on widget 扩展 EditableText "Bad state: No element": building editable text for mention

javascript - 为什么 router.push 不起作用? [Vue 3] [Vuex 4]

javascript - 获取匹配特定值的 JSON 对象

javascript - 如何管理使用 AWS Amplify Authentication 创建的用户

gruntjs - 配置 jasmine-jquery 以使用 Karma

phantomjs - webpack dllplugin 如何与 karma 一起使用?