【问题标题】:(Jest) ConnectionNotFoundError: Connection "default" was not found(开玩笑)ConnectionNotFoundError:未找到连接“默认”
【发布时间】:2021-02-19 23:28:15
【问题描述】:

我尝试在使用 typeorm 存储库的类中测试一个函数。

为了编写我的测试类,我在 github 上使用这个例子:https://github.com/jmcdo29/testing-nestjs/blob/master/apps/typeorm-sample/src/cat/cat.service.spec.ts

import { Injectable } from '@nestjs/common';
import { InjectRepository, getRepositoryToken } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Contact } from './contact.entity';
import { CreateContactDto } from './dto/createContact.dto';
import { ContactService } from './contact.service';
import { Test, TestingModule } from '@nestjs/testing';

const myContact: CreateContactDto = {email: "email@email.com", subject: "mySubject", content: "MyContent"};

describe('ContactService', () => {
    let service: ContactService;
    let repo: Repository<Contact>;

    beforeEach(async() => {
        const module: TestingModule = await Test.createTestingModule({
            providers: [
                ContactService,
                {
                    provide: getRepositoryToken(Contact),
                    useValue: {
                        save: jest.fn().mockRejectedValue(myContact),
                        find: jest.fn().mockRejectedValue(myContact),
                    },
                },
            ],
        }).compile();

        service = module.get<ContactService>(ContactService);
        repo = module.get<Repository<Contact>>(getRepositoryToken(Contact))

    });

    describe('createContact', () => {
        it('createContact Ok', async () => {
            const myNewContact: CreateContactDto = {email: "email@email.com", subject: "mySubject", content: "MyContent"};

            const result = await service.createContact(myNewContact);

            expect(result.email).toEqual(myNewContact.email);
        })
    })
});

我没有发现有什么问题,我尝试评论“repo = module.get...”,但没有任何改变。

这是服务类:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Contact } from './contact.entity';
import { CreateContactDto } from './dto/createContact.dto';

@Injectable()
export class ContactService {
  constructor(
  @InjectRepository(Contact)
  private contactRepository: Repository<Contact>){}

  async createContact(createContactDto: CreateContactDto) {
    const contact = new Contact();
    Object.assign(contact, createContactDto);
    return contact.save();
  }
  async getContacts() {
    return this.contactRepository.find();
  }
}

这是错误:

感谢您的帮助!

【问题讨论】:

  • 包含您认为以文本而非图像形式重现问题所需的所有代码

标签: typescript jestjs nestjs


【解决方案1】:

看起来它与new Contact() 有关。在您链接的测试示例中,代码使用this.repository.create() 而不是new Entity()。查看TypeORM's BaseEntity source code,很多staticinstance 方法引用connection 对象,就像save()。如果你改为这样写createContact

  async createContact(createContactDto: CreateContactDto) {
    const contact = this.contactRepository.create(createContactDto);
    await this.contactRepsitory.save(contact);
    return contact;
  }

你不会有任何问题。

编辑:确保还在您的测试文件中为repository.create 方法添加一个模拟。否则,您将收到关于 create 不是函数的错误。

【讨论】:

  • 感谢您的帮助。你也需要模拟创建功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2021-09-25
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 2021-05-30
相关资源
最近更新 更多