मैंने नेस्ट ऐप के लिए एक नया मॉड्यूल और सेवा बनाई है, इसकी एक गोलाकार निर्भरता है जो एप्लिकेशन चलाने पर सफलतापूर्वक हल हो जाती है, लेकिन जब मैं परीक्षण चलाता हूं, तो मेरा मॉक मॉड्यूल (टेस्टिंग मॉड्यूल) नई सेवा के लिए निर्भरता को हल नहीं कर सकता I बनाया था।

"MathService" के साथ एक परिपत्र निर्भरता के साथ बनाई गई "LimitsService" का उदाहरण:

@Injectable()
export class LimitsService {
      constructor(
        private readonly listService: ListService,
        @Inject(forwardRef(() => MathService))
        private readonly mathService: MathService,
      ) {}

      async verifyLimit(
        user: User,
        listId: string,
      ): Promise<void> {
         ...
         this.mathService.doSomething()
      }
     
      async someOtherMethod(){...}
}

MathService अपने तरीकों में से एक में LimitService.someOtherMethod को कॉल करती है।

इस प्रकार "MathService" के लिए परीक्षण मॉड्यूल सेटअप है ("सीमा सेवा" के बिना सब कुछ ठीक काम करता है):

const limitsServiceMock = {
  verifyLimit: jest.fn(),
  someOtherMethod: jest.fn()
};

const listServiceMock = {
  verifyLimit: jest.fn(),
  someOtherMethod: jest.fn()
};

describe('Math Service', () => {

  let mathService: MathService;
  let limitsService: LimitsService;
  let listService: ListService;
  let httpService: HttpService;


  beforeEach(async () => {
    const mockModule: TestingModule = await Test.createTestingModule({
      imports: [HttpModule],
      providers: [
        MathService,
        ConfigService,
        {
          provide: LimitsService,
          useValue: limitsServiceMock
        },
        {
          provide: ListService,
          useValue: listServiceMock
        },
      ],
    }).compile();
    
    httpService = mockModule.get(HttpService);
    limitsService = mockModule.get(LimitsService);
    listService = mockModule.get(ListService);
    mathService= mockModule.get(MathService);
    
 });

...tests

लेकिन जब मैं परीक्षण फ़ाइल चलाता हूं, तो मुझे मिलता है:

"Nest MathService (...) की निर्भरता को हल नहीं कर सकता। कृपया सुनिश्चित करें कि इंडेक्स [x] पर तर्क निर्भरता रूटटेस्ट मॉड्यूल संदर्भ में उपलब्ध है।"

मैंने "सीमा सेवा" से "गणित सेवा" पर टिप्पणी करने का प्रयास किया है और जब मैं ऐसा करता हूं तो यह काम करता है, लेकिन मुझे गणित सेवा की आवश्यकता है।

मैंने फॉरवर्डरफ() के साथ "लिमिट्स सर्विस" प्रदान करने के बजाय "लिमिट्स मॉड्यूल" आयात करने का प्रयास किया है और फिर मॉक मॉड्यूल से "लिमिट्स सर्विस" प्राप्त कर रहा है लेकिन उसने वही त्रुटि फेंक दी है।

मेरी "सीमा सेवा" को mockModule में आयात करने का उचित तरीका क्या है?

2
Nicolas Kao 11 सितंबर 2020, 02:07

1 उत्तर

सबसे बढ़िया उत्तर

यह अब मेरे लिए काम कर रहा है।

समाधान

सीमा सेवा का मज़ाक आयात करें

jest.mock('@Limits/limits.service');

मॉक के साथ प्रदाता सेट करें

describe('Math Service', () => {

  let mockLimitsService : LimitsService;

  let mathService: MathService;
  let listService: ListService;
  let httpService: HttpService;


  beforeEach(async () => {
    const mockModule: TestingModule = await Test.createTestingModule({
      imports: [HttpModule],
      providers: [
        MathService,
        ConfigService,
        LimitsService,
        {
          provide: ListService,
          useValue: listServiceMock
        },
      ],
    }).compile();

    mockLimitsService = mockModule.get(LimitsService);

    httpService = mockModule.get(HttpService);
    listService = mockModule.get(ListService);
    mathService= mockModule.get(MathService);
    
 });
0
Nicolas Kao 11 सितंबर 2020, 23:08