(开玩笑)ConnectionNotFoundError:找不到连接“默认”

时间:2020-11-07 13:11:17

标签: typescript jestjs nestjs

我尝试在使用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();
  }
}

这是错误: enter image description here

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

好像与new Contact()有关。在您链接的测试示例中,代码使用this.repository.create()而不是new Entity()。看着TypeORM's BaseEntity source code,很多staticinstance methods reference a 连接object, just like save(). If you instead write your createContact`像这样:

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

您不会有任何问题。

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