【问题标题】:How to mock a method using ts-mockito?如何使用 ts-mockito 模拟方法?
【发布时间】:2020-03-20 17:56:15
【问题描述】:

我想通过 ts-mockito@2.5.0 创建一个类的模拟对象,但我无法正确设置它。

这是人为的测试用例:

import {expect} from "chai";
import {
    mock,
    when,
} from "ts-mockito";

class MockMe {
    public doStuff(): string {
        return "I AM THE ORIGINAL VALUE";
    }
}

describe("ts-mockito weirdness", async () => {
    it("should create a mock with specific return values", async () => {
        const mocked = mock(MockMe);

        await when(mocked.doStuff()).thenReturn("I AM MOCKED");

        const actualReturnValue = mocked.doStuff();

        expect(actualReturnValue).to.eq("I AM MOCKED");
    });
});

正如测试用例所暗示的,我希望我的模拟返回值“我被嘲笑”。

但我得到的是一个 ts-mockito-specifc 对象,其中包含以下属性:methodStubCollectionmatchersmockername

我应该如何设置模拟以使其按预期工作?


旁注:这个测试用例只是为了展示我正在经历的奇怪行为。这不是我的实际测试。我想在不同服务的单元测试中使用模拟。)

【问题讨论】:

标签: typescript unit-testing mocking ts-mockito


【解决方案1】:

由于 TypeScript 的技术限制,您错过了 instance 调用。

import {
    instance,
    mock,
    when,
} from "ts-mockito";

const mockitoMock = mock(MockMe);
const actualInstanceOfMock = instance(mocked).doStuff();
actualInstanceOfMock.doStuff() // will return your mocked value

【讨论】:

  • 我很少使用 Typescript。当我回到它时,这是我认为“天哪,这看起来很熟悉,而且我记得它既愚蠢又难以弄清楚”的错误之一。这种情况很少发生,以至于我忘记了修复。
猜你喜欢
  • 2020-12-08
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多