说我在组件中有这个:
{{#if (has-spotify)}}
<i class="fa fa-spotify" data-toggle="modal" data-target="#myModal"></i>
{{else}}
<i class="fa fa-spotify" {{action "authSpotify"}}></i>
{{/if}}
has-spotify
助手有这个:
import Ember from 'ember';
export function hasSpotify() {
return this.get('spotifyService.spotifyInfo').then((result) =>{
return result !== undefined;
});
}
export default Ember.Helper.extend({
spotifyService: Ember.inject.service(),
compute: hasSpotify
});
spotifyService调用我们的API。
如何在组件测试中存根该助手?
答案 0 :(得分:0)
您可以在集成测试中使用getOwner
和register
来存储服务:
test('when spotify service fails', function(assert) {
let stub = Ember.Service.extend({ spotifyInfo: undefined });
Ember.getOwner(this).register('service:spotify-service', stub);
this.render(hbs`{{spotify-song}}`);
assert.equal(this.$().text().trim(), 'Log in', 'asks for log in');
});
你的帮助器返回一个promise,它总是很简单,意味着你的示例组件永远不会到达第二个分支。 Look at ember-promise-helpers解决这个问题。
为了回答您的测试问题,我已经简化了您的帮助,不使用承诺,如下所示:
import Ember from 'ember';
export function hasSpotify() {
return this.get('spotifyService.spotifyInfo') !== undefined;
}
export default Ember.Helper.extend({
spotifyService: Ember.inject.service(),
compute: hasSpotify
});
这是&#34;正常&#34; Spotify服务:
import Ember from 'ember';
export default Ember.Service.extend({
spotifyInfo: { username: 'alisdair' }
});
这是更简单的组件模板:
{{#if (has-spotify)}}
Song info
{{else}}
Log in
{{/if}}
快乐路径集成测试如下所示:
test('normal usage', function(assert) {
this.render(hbs`{{spotify-song}}`);
assert.equal(this.$().text().trim(), 'Song info', 'shows song info');
});
这是使用真实的服务和帮助,所以一切正常。
要将助手服务注入助手,您需要创建替换服务对象。然后使用Ember.getOwner
以与原始服务相同的名称注册存根,并渲染您的组件:
let spotifyService = Ember.Service.extend({ spotifyInfo: undefined });
Ember.owner.register('service:spotify-service', spotifyService);
this.render(hbs`{{spotify-song}}`);
然后,您的帮助程序将注入此存根服务,您可以使用该服务将其行为更改为您想要的测试。