Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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 微光中的组件单元测试_Unit Testing_Ember.js_Integration Testing_Glimmer.js - Fatal编程技术网

Unit testing 微光中的组件单元测试

Unit testing 微光中的组件单元测试,unit-testing,ember.js,integration-testing,glimmer.js,Unit Testing,Ember.js,Integration Testing,Glimmer.js,对于经典的组件单元测试,我们如何将其迁移到Glimmer?此组件单元测试正在测试未向用户公开的本地道具 const component = this.owner .factoryFor('component:some-component') .create({ someModel: { foo: 'bar' } }); assert.equal(component.get('someLocalProp'), false); 这些确实是一种反模式!事实上,单元测试组件通常是

对于经典的组件单元测试,我们如何将其迁移到Glimmer?此组件单元测试正在测试未向用户公开的本地道具

const component = this.owner
  .factoryFor('component:some-component')
  .create({
    someModel: { foo: 'bar' }
  });

assert.equal(component.get('someLocalProp'), false);

这些确实是一种反模式!事实上,单元测试组件通常是一种反模式:您实际上并不是以这种方式对组件进行测试的。我的意思是:与组件的所有交互,无论是作为调用它的另一个开发人员还是作为与它交互的用户,都是通过模板进行的。这样的“单元”测试并不代表最终用户或调用它的其他开发人员将如何与它交互

大多数情况下,这样的测试之所以存在,是因为开发人员希望检查内部方法或getter的行为。然而,这与我们在测试时应该做的恰恰相反。我们只想测试公共契约:这就是允许我们实际执行重构工作的原因:也就是说,在不更改公共契约的情况下更改内部实现。依赖内部行为的测试必然是过度耦合和脆弱的。在UI组件的情况下,这意味着像这样的“单元”测试实际上总是过度耦合和脆弱的

例如,如果getter在模板中不直接可见,谁会关心它是否计算给定的值呢?我们实际上只关心计算的结果


Glimmer组件没有直接对应的API,部分原因是这样的。这里正确的模式是将组件测试重写为集成测试,这确实允许您测试组件的实际接口(或者如果它不提供实际值,则将其删除)。

这些确实是一种反模式!事实上,单元测试组件通常是一种反模式:您实际上并不是以这种方式对组件进行测试的。我的意思是:与组件的所有交互,无论是作为调用它的另一个开发人员还是作为与它交互的用户,都是通过模板进行的。这样的“单元”测试并不代表最终用户或调用它的其他开发人员将如何与它交互

大多数情况下,这样的测试之所以存在,是因为开发人员希望检查内部方法或getter的行为。然而,这与我们在测试时应该做的恰恰相反。我们只想测试公共契约:这就是允许我们实际执行重构工作的原因:也就是说,在不更改公共契约的情况下更改内部实现。依赖内部行为的测试必然是过度耦合和脆弱的。在UI组件的情况下,这意味着像这样的“单元”测试实际上总是过度耦合和脆弱的

例如,如果getter在模板中不直接可见,谁会关心它是否计算给定的值呢?我们实际上只关心计算的结果

Glimmer组件没有直接对应的API,部分原因是这样的。这里正确的模式是将组件测试重写为集成测试,这确实允许您测试组件的实际接口(或者如果它不提供实际值,则将其删除)