Aurelia单元测试-如何模拟自定义解析器

Aurelia Unit Test - How to mock a custom resolver

本文关键字:自定义 模拟 单元测试 何模拟 Aurelia      更新时间:2023-09-26

这是我试图测试的类:

import {inject} from 'aurelia-framework';
import {CrudResource, DependencyFactory} from 'utils';
let commonData = {};
    @inject(DependencyFactory.of(CrudResource))
    export class CommonDataCache {
        constructor(crudResourceFactory) {
            this.crudResource = crudResourceFactory('/Common');
        }
        data() {
            return Object.keys(commonData).length > 0 ? commonData :
                this.crudResource.get().then(response => {
                    commonData.clientEntities = response;
                    return commonData;
                });
        }
    }

我正试图写这个测试(为了简洁起见,只发布了相关部分):

beforeEach(() => {
        container = new Container();
        container.registerInstance('DependencyFactory.of(CrudResource)', new CrudResourceFactoryMock());
        templatingEngine = container.get(TemplatingEngine);
        cdc = templatingEngine.createViewModelForUnitTest(CommonDataCache);
    });

基本上,由于我的类正在注入资源的工厂(工厂只允许我在构造时配置注入的依赖项),我正试图传入一个模拟工厂(它将传入一个模仿依赖项)。

我面临的问题是,不知何故,CommonDataCache类正在用它的常规依赖项进行实例化(而不是我嘲笑的依赖项)。不知怎的,aurelia不明白我已经为'DependencyFactory.of(CrudResource)'分辨率注册了一家模拟工厂。

提前谢谢。

我个人不会在单元测试中使用依赖项注入。我会创建一个mock并将其传递给CommonDataCache的构造函数。

一旦您开始使用DI系统,您就不再创建单元测试,而是开始创建E2E测试。