Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何为单元测试存根Vue组件方法_Unit Testing_Vue.js_Mocha.js_Sinon - Fatal编程技术网

Unit testing 如何为单元测试存根Vue组件方法

Unit testing 如何为单元测试存根Vue组件方法,unit-testing,vue.js,mocha.js,sinon,Unit Testing,Vue.js,Mocha.js,Sinon,如何从Vue单文件组件中存根某些方法(特别是getter),以便使用mocha/expect进行单元测试 我面临的问题如下: 我有一个带有get方法someData的组件 但是,我得到以下错误: TypeError:无法存根不存在的自有属性someData 此外,对于其他每个方法,我都会得到相同的错误,我希望以类似的方式存根,例如initSomeStringProperty()。在上面的代码中someData是通过vue属性装饰器使用属性访问器定义的计算属性 它可以在两个点上存根,或者在类原型上

如何从Vue单文件组件中存根某些方法(特别是getter),以便使用mocha/expect进行单元测试

我面临的问题如下: 我有一个带有get方法someData的组件

但是,我得到以下错误:

TypeError:无法存根不存在的自有属性someData


此外,对于其他每个方法,我都会得到相同的错误,我希望以类似的方式存根,例如initSomeStringProperty()。

在上面的代码中
someData
是通过
vue属性装饰器
使用属性访问器定义的计算属性

它可以在两个点上存根,或者在类原型上:

sinon.stub(MyApp.prototype, 'someData').get(() => 'foo');
或组件选项:

sinon.stub(MyApp.options.computed.someData, 'get').value('foo');

您可以设置组件的,如下所示更新:从1.x开始,设置方法一直支持存根(请参阅如何正确使用Sinon存根)。

const wrapper=shallowMount(MyApp{
计算:{
someData:()=>“foo”
},
方法:{
initSomeStringProperty:()=>“条”
}
})
expect(wrapper.vm.someData).to.equal('foo'))
expect(wrapper.vm.initSomeStringProperty()).to.equal('bar'))
如果您只是试图避免关于
$route
未定义的错误,您可以:

const wrapper=shallowMount(MyApp{
模拟:{
$route:{path:'/home'}
}
})
expect(wrapper.vm.someData).to.equal('home'))

它是一个vue类组件。请在上面编辑的问题中找到示例代码。“通过
方法
属性覆盖方法已被弃用,并将在下一个主要版本中删除。
方法
属性没有明确的迁移路径-Vue不支持方法的任意替换,VTU也不应支持。要存根一个复杂的方法,请从组件中提取它并单独测试它。否则,建议重新考虑这些测试。”@VongarnichtsundStuff补充了关于反对的注释
sinon.stub(MyApp.prototype, 'someData').get(() => 'foo');
sinon.stub(MyApp.options.computed.someData, 'get').value('foo');