我正在开发一个带有 init 函数的 Ember 组件,我想为其添加一个单元测试。该组件具有以下属性:
1( init 函数不能运行多次,并且
2( 组件依赖于将模型(当前用户(传递给它。
到目前为止,我已经尝试编写这样的测试:
test('#init', function(assert) {
const component = this.owner.lookup('component:component-that-depends-on-property');
const currentUser = make('user');
component.set('currentUser', user);
component.init();
assert.ok(component.somethingHasHappened);
});
我的问题是 init 方法是在 owner.lookup 行上运行的,这意味着我无法在运行之前将当前用户放入组件中。同样,我不能在不破坏组件状态的情况下多次运行 init 方法。
我注意到查找方法需要一个options
参数,并认为我可以使用它来传递currentUser,但这似乎不起作用,我找不到太多关于查找方法的文档。
如果可能的话,我想避免为此编写集成测试。有没有我没有看到的好方法/解决方法?
我建议为组件编写集成测试。避免为组件编写单元测试用例,而是为控制器、mixin、模型、路由、服务编写单元测试用例
如果对组件进行单元测试,则可以执行以下操作:
const component = this.owner.factoryFor('component:component-that-depends-on-property').create({
currentUser: user,
});
这将创建一个具有currentUser
集的组件实例。您不需要显式调用init()
,因为它是在create()
调用的。