ember.js Glimmer组件单元测试

ltskdhd1  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(163)

对于经典的组件单元测试,我们如何将其迁移到Glimmer?这个组件单元测试正在测试一个没有暴露给用户的本地道具。

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

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

vohkndzv1#

这些确实是一个反模式!实际上,单元测试组件通常是一个反模式:你实际上并不是这个组件的testing the interface。我的意思是这样的:与组件的所有交互,无论是作为另一个开发者调用它还是作为一个用户与它交互,都是通过模板发生的。像这样测试它的“单元”并不代表最终用户或调用它的其他开发者将如何能够与它交互。
大多数时候,这样的测试之所以存在,是因为开发人员想要检查内部方法或getter的行为。然而,这与我们在测试时应该做的事情完全 * 相反 *。我们 * 只 * 想要测试公共契约:这就是我们真正进行重构的原因:也就是说,改变内部实现而不改变公共契约。依赖于内部行为的测试必然是过耦合和脆弱的。对于UI组件,这意味着像这样的“单元”测试实际上总是过耦合和脆弱的。
例如,如果getter在模板中是不可见的,那么谁会关心它是否计算给定的值呢?我们实际上只关心计算的 * 结果 *。
Glimmer组件没有直接对应的API,部分原因就是这个。这里正确的模式是将组件测试重写为集成测试,它 * 确实 * 允许您测试组件的实际接口(或者如果它不提供实际值,则删除它)。

相关问题