最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to mock a method in the same class I'm testing in nestjsjest - Stack Overflow

programmeradmin2浏览0评论

I have a service in NestJS I'm testing using @nestjs/testing in Typescript. But one of the methods depends on another, I would like to mock out the dependent method for only one test, so I can't use the ES6 class mocking, as that would override the class I'm testing with a mock.

class UsersService {
  findMany(ids) {
    return ids.map(id => this.findOne(id));
  }
  
  findOne(id) {
    return this.httpService.get(id);
  }
}

I want to test both methods, but I want to mock findOne only when I'm testing findMany.
Thanks in advance.

I have a service in NestJS I'm testing using @nestjs/testing in Typescript. But one of the methods depends on another, I would like to mock out the dependent method for only one test, so I can't use the ES6 class mocking, as that would override the class I'm testing with a mock.

class UsersService {
  findMany(ids) {
    return ids.map(id => this.findOne(id));
  }
  
  findOne(id) {
    return this.httpService.get(id);
  }
}

I want to test both methods, but I want to mock findOne only when I'm testing findMany.
Thanks in advance.

Share Improve this question asked Jan 16, 2022 at 21:05 C0l0redC0l0red 451 gold badge1 silver badge7 bronze badges 1
  • 1 Don't.. Don't mock parts of the thing you're supposed to be testing. See e.g. stackoverflow./q/66738500/3001761. – jonrsharpe Commented Jan 16, 2022 at 22:13
Add a ment  | 

1 Answer 1

Reset to default 3

You want to use spying here. Look for 'spyOn' in this documentation: https://docs.nestjs./fundamentals/testing near the bottom.

Here's an example I tried to cook up that's related to your posted code:

test('findMany', () => {
  const spy = new UsersService;
  // Here's the key part ... you could replace that "awesome" with something appropriate
  jest
    .spyOn(spy, 'findOne')
    .mockImplementation(() => "awesome");
  
  // Just proving that the mocking worked, you can remove this
  expect(spy.findOne()).toBe("awesome");

  const ids = ["Dio", "Lemmy"];
  expect(spy.findMany(ids)).toStrictEqual(["awesome", "awesome"])
});

发布评论

评论列表(0)

  1. 暂无评论