开玩笑错误:预期的“{”,得到“命名空间”......使用命名空间和@Injectable

Jest Error: Expected '{', got 'namespace' ... Using namespace and @Injectable

提问人:Evandro Silva 提问时间:2/1/2023 更新时间:2/2/2023 访问量:322

问:

我正在使用:NestJS,我有一个使用命名空间导出的类。在导出命名空间之后,我有 NestJS @Injectable装饰器,当我尝试运行测试时出现以下错误: × 预期的“{”,得到“命名空间”

没有@Injectable测试运行没有问题,但我需要注射剂。

带注射剂的类

export namespace SearchCase {
    @Injectable()
    export class SearchCase {

        constructor(private casesRepository: InterfaceRepository<Case.Case>) { }

        async execute(request: RequestSearchCase): Promise<ResponseSearchCase> {
            const searchResult = await this.casesRepository.search(request.search);

            return {
                searchResult,
            };
        }
    }
}

测试

describe('Search Case', () => {
    it('should be able return a case with substring', async () => {
        const casesRepository = new InMemoryCaseRepository();

        const searchCase = new SearchCase.SearchCase(casesRepository);

        const createCase = new Case.Case({
            utente: 'utente test',
            caseOrigin: 'case origin test',
            reportingDate: new Date(),
            reporterName: 'Emanuela Xavier',
            disease: 'disease test',
        })

        await casesRepository.create(createCase);
        
        const response = await searchCase.execute({
            search: 'Ema'
        });

        expect(response.searchResult.length).toBe(1);
        expect(response.searchResult[0].reporterName).toContain('Ema');
    });
});

错误 运行测试时显示错误

删除测试@Injectable没有问题,但我需要使用它。

JavaScript 单元测试 jestjs 命名空间 nestjs

评论

0赞 Mostafa Fakhraei 2/1/2023
为什么要手动创建实例?
0赞 Jay McDoniel 2/2/2023
为什么要使用?我不确定 Typescript 是否支持命名空间内的修饰类namespace
0赞 Mostafa Fakhraei 2/2/2023
@JayMcDoniel 它工作正常。我很久以前就用 NestJS 测试过了。
0赞 Jay McDoniel 2/2/2023
啊,好吧。然后是关于如何解释代码ts-jest
0赞 Evandro Silva 2/2/2023
实际上,“问题”出在测试运行器中。我使用的是 swc 而不是 ts-jest,当我切换到 ts-jest 时,它又起作用了。

答:

0赞 Evandro Silva 2/2/2023 #1

我使用的是 SWC/Jest 而不是 ts-jest,当我在jest.config.ts切换到 ts-jest 时,即使我使用的是 @Injectable,测试也恢复了工作。

我仍然不明白为什么 @swc/jest 会失败,但现在它正在工作,当我有时间时,我会进行更多研究以找出错误。

@swc/jest 的配置不起作用 存档:jest.config.ts

"transform": { 
    "^.+\\.(t|j)s$": ["@swc/jest"]
}

使用 @SW/jest 进行配置,存档:jest.config.ts

"transform": { 
    "^.+\\.(t|j)s$": "ts-jest"
}