-
Notifications
You must be signed in to change notification settings - Fork 68
Open
Description
Nice library, works great with VueJS components, but fails when the components is wrapped and mounted for testing!
ie: Given a service, a main.ts and an App.vue component, everything works fine:
- service.ts
abstract class IService{}
class Service extends IService{}- main.ts
import "reflect-metadata";
import Vue from "vue";
import App from "./App.vue";
import { Container } from "typescript-ioc";
import { IService, Service } from "./service";
Container.bind(IService).to(Service)
new Vue({
router,
render: (h) => h(App),
}).$mount('#app');- App.vue
<template>
<div>App</div>
</template>
<script lang="ts">
import { Component, Vue } from "vue-property-decorator";
import { Inject } from "typescript-ioc";
import { IService } from "./services";
@Component()
export default class App extends Vue {
@Inject service1:IService // this works in browser, but fails in tests
service2:IService = Container.get(IService) // this works in browser and also in tests
}
</script>However a test which wraps the App component fails:
import "reflect-metadata";
import { Container } from "typescript-ioc";
import { IService, Service } from "../../src/service";
import { mount } from "@vue/test-utils";
import App from "../../src/App.vue";
describe("TS_IOC specs", () => {
it("should return correct instances", () => {
Container.bind(IService).to(Service);
// this succeeds, ie: the instance exists in the container:
const a = Container.get(IService)
// but this fails:
const wrapper = mount(App)
});
});Error message is: TypeError: Invalid type requested to IoC container. Type is not defined.
So, I'm curious, the instance and type exits in the container, but the wrapper doesn't find it.
Yet the App runs fine outside the test.
Why would this fail: @Inject service:IService
but this passes: service:IService = Container.get(IService)
wsmd, logaoleg and BradenM
Metadata
Metadata
Assignees
Labels
No labels