WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

TypeError: Invalid type requested to IoC container. Type is not defined. #77

@davidmoshal

Description

@davidmoshal

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions