【问题标题】:Angular 2 Unit Testing: Injecting Typemoq objectsAngular 2 单元测试:注入 Typemoq 对象
【发布时间】:2016-08-29 10:54:09
【问题描述】:

我正在 Typescript 中为 Angular 2 (RC4) 中的服务实施单元测试。测试服务(“计算”)使用许多其他组件(“Bausparen”),这些组件本身使用组件(“BausparenInput”)。所有组件都声明为@Injectable()。

我尝试使用 Typemoq 模拟 Bausparen 等依赖组件,并在运行测试之前注入它们。无论如何,它不起作用:

FAILED TESTS:
Calculation Service
× should return empty array when fromYear > toYear
  PhantomJS 2.1.1 (Windows 7 0.0.0)
factory
factory
resolveReflectiveFactory
resolveReflectiveProvider
map@[native code]
apply@[native code]
call@[native code]
call@[native code]
Call
map
resolveReflectiveProviders
resolve
resolveAndCreateChild
createInjector
execute

Jasminesdescribe 函数内部代码如下:

let calcInput = x => x.calc(TypeMoq.It.isAnyNumber(), TypeMoq.It.isAnyNumber());
let calcInputFormer = x => x.calc(TypeMoq.It.isAnyNumber(), TypeMoq.It.isAnyNumber(), TypeMoq.It.isAnyNumber());
let calcOutput = (y, m) => new CalcOutput();
let calcOutputFormer = (y, m, f) => new CalcOutput();
let bausparenMock = TypeMoq.Mock.ofType(Bausparen);
bausparenMock.setup(calcInput).returns(calcOutput);
bausparenMock.setup(calcInputFormer).returns(calcOutputFormer);

beforeEach(() => {
  addProviders([CalculationService,
    { provide: Bausparen, useClass: bausparenMock }]);
});

it('should return empty array when fromYear > toYear',
  inject([CalculationService], (calculation: CalculationService) => {
    let result = calculation.getValues(6, 2017, 6, 2016);
    expect(result.length).toBe(0);
}));

要模拟的类的签名是这样的:

class Bausparen implements Calculation {
  calc(year: number, month: number, formerAmount?: number): CalcOutput {...}
}

错误消息并没有真正告诉我任何事情。我什至不知道这是否是我的模拟设置或注入它的问题。以前有人遇到过类似的错误吗?

【问题讨论】:

    标签: unit-testing angular typescript mocking jasmine


    【解决方案1】:

    你应该替换:

    { provide: Bausparen, useClass: bausparenMock }
    

    与:

    { provide: Bausparen, useValue: bausparenMock }
    

    因为模拟是价值而不是类

    也看ts-mockito

    【讨论】:

    • 像魅力一样工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多