簡體   English   中英

TypeError:無法讀取未定義的 Jest 和 Nest 的屬性“then”

[英]TypeError: Cannot read property 'then' of undefined Jest and Nest

我正在嘗試為我的 NestJS API 編寫一個單元測試,但是當我嘗試在我的服務 class 中模擬一個方法時,我得到了這個TypeError: Cannot read property 'then' of undefined error。 你能解釋一下我的代碼有什么問題嗎?

服務:

async userExist(data: User): Promise<boolean> {
    return new Promise((resolve, reject) => {
      this.usereRepository
        .findOne({
          where: {
            name: data.name,
          },
        })
        .then((res) => {
          if (!res) {
            resolve(false);
          }
          resolve(true);
        })
        .catch((err) => {
          reject(err);
        });
    });
  }

async createUser(data: User): Promise<User> {
    return new Promise((resolve, reject) => {
      this.userExist(data).then((exist) => {
        if (exist) {
          return reject('User already exist');
        }
        this.userRepository
          .save(data)
          .then((res) => {
            resolve(res);
          })
          .catch((err) => {
            reject(err);
          });
      });
    });
  }

服務測試:

it('should create a new user without error', async () => {
      jest
        .spyOn(service, 'userExist')
        .mockImplementation(() => Promise.resolve(false));
      await service.createUser(data);
      expect(userRepository.save).toHaveBeenCalled();
});

我不知道這是否有幫助,但我將beforeEach放在我模擬我的savefindOne數據庫函數的地方。

let service: UserService;
let userRepository: Repository<User>;
beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [
        UserService,
        {
          provide: getRepositoryToken(User),
          useValue: {
            save: jest.fn(),
            findOne: jest.fn(),
          },
        },
      ],
    }).compile();
    service = module.get<UserService>(UserService);
    userRepository = module.get<Repository<User>>(
      getRepositoryToken(User)
    );
  });

錯誤跟蹤

TypeError: Cannot read property 'then' of undefined

      64 |         if (exist) {
      65 |           return reject('User already exist');
    > 66 |         }
         |          ^
      67 |         this.userRepository
      68 |           .save(data)
      69 |           .then((res) => {

那是因為save()不是async function,改成這樣:

        {
          provide: getRepositoryToken(User),
          useValue: {
            save: jest.fn().mockResolvedValue('user_object'),
            findOne:jest.fn().mockResolvedValue('user_object'),
          },
        },

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM