TypeError:无法读取未定义的属性“getter”

新手上路,请多包涵

我正在尝试测试一个引用 Vuex 存储的基本 Vue 组件。我以为我遵循了 Vue 的示例( https://vue-test-utils.vuejs.org/guides/using-with-vuex.html#mocking-getters ),但它似乎没有用。

我得到标题中提到的错误。

 const localVue = createLocalVue()
localVue.use(Vuex)

describe('Navbar.vue', () => {
  let store: any
  let getters: any

  beforeEach(() => {
    getters: {
      isLoggedIn: () => false
    }

    store = new Vuex.Store({
      getters
    })
  })

  it('renders props.title when passed', () => {
    const title = 'Smart Filing'
    const wrapper = shallowMount(Navbar, {
      propsData: { title },
      i18n,
      store,
      localVue,
      stubs: ['router-link']
    })

    expect(wrapper.text()).to.include(title)
  })
})

我正在使用类组件,所以这可能与它有关吗?

 @Component({
  props: {
    title: String
  },
  computed: mapGetters(['isLoggedIn'])
})
export default class Navbar extends mixins(Utils) {}

提前致谢。

原文由 Programmingjoe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 369
2 个回答

弄清楚了。

当您在组件中声明 getter 时,请确保定义将要使用的变量。

 @Component({
  props: {
    title: String
  },
  computed: mapGetters(['isLoggedIn'])
})
export default class Navbar extends mixins(Utils) {
  isLoggedIn!: boolean <== I did not have this before.
  ...
}

编辑:另外,我实际上并没有在测试中使用模拟 getter,所以你甚至不需要模拟商店。您需要做的就是在组件上声明该变量。

原文由 Programmingjoe 发布,翻译遵循 CC BY-SA 4.0 许可协议

这里的“吸气剂”没有正确分配:

   beforeEach(() => {
    getters: {
      isLoggedIn: () => false
    }

    store = new Vuex.Store({
      getters
    })
  })

它应该是 getters = {... 而不是 getters: {... 因为你对 beforeEach 的论点是一个函数而不是一个对象。

我可以确认它确实正确地写在文档中。

祝你好运!

原文由 Jeremi G 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题