Unit testing 微光中的组件单元测试
对于经典的组件单元测试,我们如何将其迁移到Glimmer?此组件单元测试正在测试未向用户公开的本地道具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); 这些确实是一种反模式!事实上,单元测试组件通常是
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,部分原因是这样的。这里正确的模式是将组件测试重写为集成测试,这确实允许您测试组件的实际接口(或者如果它不提供实际值,则将其删除)