작성
·
1.3K
0
constructor(
@InjectRepository(UsersEntity)
private usersRepository: Repository<UsersEntity>,
@InjectRepository(WorkspaceMembersEntity)
private workspaceMembersRepository: Repository<WorkspaceMembersEntity>,
@InjectRepository(ChannelMembersEntity)
private channelMembersRepository: Repository<ChannelMembersEntity>,
private connection: Connection,
) {}
답변 4
0
test쪽에서 getRepositoryToken(ChannelMembersEntity) 아래에 Connection 추가하시면 됩니다.
{
provide: getRepositoryToken(ChannelMembersEntity),
useClass: MockChannelMembersRepository,
}, Connection
조현영 선생님 안녕하십니까 선생님 강의를 정말 좋아하고 열심히 듣고있습니다.
하지만 약 4일간 이 질문글과 같은 에러를 해결못하는 중에 있습니다..
현영님의 답변처럼 Connection을 추가하면
에러가 나오고 이 에러의 해결방법이 말씀하신 Connection을 모킹해야 하는 경우라고 생각은 되지만 방법을 잘 모르겠습니다. . ㅠㅜㅠ
제가 강의들을 때의 코드는 질문자분과 조금 바뀐 상태입니다
오늘날짜기준 zerocho 깃허브의 sleact/nest-typeorm 코드를 그대로 사용중입니다.
0
import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersEntity } from '../entities/Users.entity';
import { WorkspaceMembersEntity } from '../entities/WorkspaceMembers.entity';
import { ChannelMembersEntity } from '../entities/ChannelMembers.entity';
@Module({
imports: [
TypeOrmModule.forFeature([
UsersEntity,
WorkspaceMembersEntity,
ChannelMembersEntity,
]),
],
providers: [UsersService],
exports: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
users.module.ts 파일입니다.
0
import { Test, TestingModule } from '@nestjs/testing';
import { UsersService } from './users.service';
import { getRepositoryToken } from '@nestjs/typeorm';
import { UsersEntity } from '../entities/Users.entity';
import { WorkspaceMembersEntity } from '../entities/WorkspaceMembers.entity';
import { ChannelMembersEntity } from '../entities/ChannelMembers.entity';
class MockUserRepository {
#data = [{ id: 2, email: 'test@gmail.com' }];
findOne({ where: { email } }) {
const data = this.#data.find((v) => v.email === email);
if (data) {
return data;
}
return null;
}
}
class MockWorkspaceMembersRepository {}
class MockChannelMembersRepository {}
describe('UsersService', () => {
let service: UsersService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
UsersService,
{
provide: getRepositoryToken(UsersEntity),
useClass: MockUserRepository,
},
{
provide: getRepositoryToken(WorkspaceMembersEntity),
useClass: MockWorkspaceMembersRepository,
},
{
provide: getRepositoryToken(ChannelMembersEntity),
useClass: MockChannelMembersRepository,
},
],
}).compile();
service = module.get<UsersService>(UsersService);
});
it('should be defined', () => {
expect(service).toBeDefined();
});
it('findByEmail은 이메일을 통해 유저를 찾아야 함', () => {
expect(service.findByEmail('test@gmail.com')).resolves.toBe({
email: 'test@gmail.com',
id: 2,
});
});
it('findByEmail은 유저를 못 찾으면 null을 반환해야 함', () => {
expect(service.findByEmail('test@gail.com')).resolves.toBe(null);
});
});
users.service.spec.ts 파일입니다.
{ provide: connection, useClass: class MockConnection {} }