Mirza Chilman
Mirza Chilman

Reputation: 429

test class method that return another class

I want to test whether the main class method of getService return the correct new class based on the correct conditional

// main.js
import ServiceA from './serviceA'
import ServiceB from './serviceB'

class Main {
   constructor(){}
   getService(serviceName){
     switch(serviceName){
       case 'serviceA':
          return new ServiceA()
       case 'serviceB':
          return new ServiceB()
       default
          return null
     }
  }
}

Would it be possible to test that the returned class is correct? I tried something like this

import Main from './Main'

describe('Main method', () => {
  describe('getService given ServiceA', () => {
    it.skip('should return an instantiate of ServiceA class', function () {
      const main = new Main();
      const getService = spy(main, 'getService');

      main.getService('serviceA');

      expect(getService).to.be.an.instanceOf(ServiceA);
    });
  });

Upvotes: 0

Views: 40

Answers (1)

Andrew Nolan
Andrew Nolan

Reputation: 2107

There shouldn't be a need to spy on getService(). Since you are just testing the input and output of the getService() without any dependencies. Spying would allow to see call count and arguments passed to the spy to see if it was called inside the method you are testing. How you had it is mostly correct as it is.

import Main from './Main'

describe('Main method', () => {
  describe('getService given ServiceA', () => {
    it('should return an instantiate of ServiceA class', function () {
      const main = new Main();
      const result = main.getService('serviceA');
      expect(result).to.be.an.instanceOf(ServiceA);
    });
});

Upvotes: 1

Related Questions