У меня такая ситуация:
// symbols.ts - Injection Key defined as a Symbol
export const FAQ_SERVICE: InjectionKey<FAQService> = Symbol('FAQService');
// main.ts - globally provides a service using the injection key
app.provide(FAQ_SERVICE, new FAQService());
// FAQIndex.vue - component using the injected service
…
setup() {
return {
faqService: inject(FAQ_SERVICE) as FAQService,
};
}
…
Теперь я хочу протестировать этот компонент с помощью шутки и имитировать службу. Я знаю, что когда я предоставляю объекты с использованием простых строк, я могу сделать это с помощью этого шаблона:
component = mount(FAQIndex, {
global: {
provide: {
'FAQ_SERVICE': { /* mock object */ },
},
},
});
Но как я могу это сделать, если служба вводится через символы, как в приведенном выше примере?






Импортируйте FAQ_SERVICE в свой тест точно так же, как это делает ваше приложение:
import { FAQ_SERVICE } from './symbols'
it('does something', () => {
const component = mount(FAQIndex, {
global: {
provide: {
[FAQ_SERVICE as symbol]: { /* mock object */ }
}
}
})
})
Мне пришлось добавить явное приведение типов ([FAQ_SERVICE as symbol]), но теперь оно работает - спасибо! :)
Это символ, поэтому используйте его как символ
provide: { [FAQ_SERVICE]: ....