我想测试记录器是否正确递增(使用 Jest)。查看下面的代码,这意味着我想检查增量(1)(意味着 void 的内容myMethod)是否被调用。
// myScript.ts
import dd from 'datadog-metrics';
export class MyClass {
private bufferedMetricsLogger: dd.BufferedMetricsLogger;
constructor(bufferedMetricsLogger: dd.BufferedMetricsLogger) {
this.bufferedMetricsLogger = bufferedMetricsLogger;
}
public myMethod(myInput: String): void {
this.bufferedMetricsLogger.increment('my.key.name', 1, [`myTag:${myInput}`]); // (1)
}
}
// myScript.test.ts
import { mock, instance, verify } from 'ts-mockito';
import { BufferedMetricsLogger } from 'datadog-metrics';
import { myClass } from 'path/to/myScript';
describe('Testing MyClass', () => {
it('verify that myMethod increments', () => {
const mockedBufferedMetricsLogger: BufferedMetricsLogger = mock(BufferedMetricsLogger);
const …Run Code Online (Sandbox Code Playgroud) 我有一个接受 lambda 的函数(并且 lambda 也接受一个参数)。我如何模拟该功能?
在下面的示例中,我试图模拟connection.xmppStanzas:
示例类:
type Matcher<T> = (t: T) => boolean;
const myMatcher: Matcher<Element> = (id: string) => ...;
class SomeClass {
constructor(private readonly idSource: IdSource,
private readonly connection: XmppConnection) {}
doSomething() {
const id = this.idSource.getId();
this.connection.xmppStanzas(myMatcher(id)).pipe(
...do something with the stanza
);
}
}
Run Code Online (Sandbox Code Playgroud)
测试SomeClass:
describe('SomeClass', () => {
let idSource: IdSource;
let connection: XmppConnection;
let instance: SomeClass;
beforeEach(() => {
idSource = mock(idSource);
connection = mock(XmppConnection);
instance = new SomeClass( …Run Code Online (Sandbox Code Playgroud) 我想通过 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");
});
});
Run Code Online (Sandbox Code Playgroud)
正如测试用例所暗示的那样,我希望从我的模拟中返回“I AM MOCKED”的返回值。
但是,我得到一个TS-的Mockito-specifc对象,而不是,包含类似的属性:methodStubCollection,matchers, mocker,和name。

我应该如何设置它按预期工作的模拟?
旁注:这个测试用例只是为了展示我遇到的奇怪行为。这不是我的实际测试。我想在不同服务的单元测试中使用模拟。)