unit-testing - 如何为单元测试存根 Vue 组件方法
问题描述
如何从 Vue 单文件组件中存根某些方法(特别是 getter)以使用 mocha/expect 进行单元测试?
我面临的问题如下:我有一个带有 get 方法someData的组件
<script lang="ts">
import { Vue, Component } from 'vue-property-decorator'
import SomeService from '@/services/some.service'
@Component()
export default class MyApp extends Vue {
...
mounted () {
...
}
get someData () {
return this.$route.path.split('/')[1] || 'main'
}
get getLocation () {
return this.someService.getBaseURL()
}
initSomeStringProperty (): string {
return 'some string'
}
}
</script>
我的测试总是失败:
[Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘路径’”
当我尝试使用 sinon 存根方法时,如下所示:
describe('MyApp.vue', () => {
if('returns main', () => {
const dataStub = sinon.stub(MyApp, 'someData')
listStub.yields(undefined, 'main')
const wrapper = shallowMount(AppNavBar)
expect(wrapper.text()).to.include('Some Content')
})
})
但是,我收到以下错误:
TypeError:无法存根不存在的自己的属性 someData
此外,对于其他所有方法,我都会遇到相同的错误,我想类似地存根,例如 initSomeStringProperty()。
解决方案
在上面的代码someData
中是通过属性访问器定义的计算属性vue-property-decorator
。
它可以在两个点上存根,或者在类原型上:
sinon.stub(MyApp.prototype, 'someData').get(() => 'foo');
或组件选项:
sinon.stub(MyApp.options.computed.someData, 'get').value('foo');
推荐阅读
- c++ - 有条件地将 std::string 分配为引用
- ios - 如何使用 Appium 在 ios 中获取应用程序版本、设备操作系统版本等应用程序信息?
- html - 我的 CSS 代码中有两个错误,“预期的 RBRACE”、“意外的 RBRACE”和“预期的 LBRACE”
- python - KNN 或 K-Means 聚类的 Python 示例
- r - 如何让树节点在 tree.map 中正确嵌套
- gcc - GCC 内置函数 - 2003 与 2019 的行为
- android - 无法在布局的单行中显示元素
- c# - 如何在UWP中使文本从下到上移动动画
- python - 使用 Python 和 win32com 从 Outlook 检索电子邮件时出现突发错误
- html - 是否可以在路由的 Angular 项目中调用静态 HTML 页面?