7

方法一:

const mixin = {
  beforeCreate() {
    // do something
  }
}

mount(TestComponent, {
  mixins: [mixin]
})

和方法二:

const mixin = {
  beforeCreate() {
    // do something
  }
}

localVue = createLocalVue()
localVue.mixin(mixin)

mount(TestComponent, {
  localVue
})

这两种方法都不适合我。我收到一个错误:在开发环境和 CodeSandbox 上无法读取未定义的属性 'props'。 https://codesandbox.io/s/4031x2r769

如何正确模拟生命周期钩子?

4

1 回答 1

1

您有问题的示例是正确的,但您的CodeSandbox混合语法不正确(它应该是一个对象)。但主要问题是 mixin 生命周期钩子在组件之前调用,因此您的msg分配被组件覆盖(请参阅 mixin merging docs)。

例如,如果您将createdmixin更改mounted为,那么它将被传递,因为HelloWorld不会更改msg该钩子中的字段(或钩子不存在)。

CodeSandbox 有我的固定测试代码:

import { expect } from "chai";
import { mount, createLocalVue } from "@vue/test-utils";
import HelloWord from "../src/components/HelloWorld.vue";

describe("test mocks", () => {
  const localVue = createLocalVue();

  const msg = "from mock";
  let mixin = {
    // change hook to "later" one to  make it work
    mounted() {
      this.msg = msg;
    }
  }

  localVue.mixin(mixin);

  const wrapper = mount(HelloWord, {
    localVue
  });

  it("hook created", () => {
    expect(wrapper.vm.msg).eq(msg);
  });
});
于 2018-08-11T10:26:16.853 回答