开玩笑 - 调用 toHaveBeenCalledWith 时正确模拟 Date

jest - mocking Date correctly when calling toHaveBeenCalledWith

我正在尝试对根据我创建的 API 的响应创建 cookie 的服务进行单元测试。

export interface ISessionService {
    createSession(): Observable<ApplicationSession>;
    validateSession(): Observable<boolean>;
}

响应看起来像这样:

export abstract class ApplicationSession {
    public readonly reference: string;
    public readonly dateCreated: Date;
    public readonly expiryDate: Date;
}

当调用 SessionService.createSession() 时,它执行 rxjs tap 并通过另一个服务创建 cookie,我正在尝试测试是否使用正确的参数调用了 cookieService。像这样:

 describe('given a successful request to create a session', () => {
        beforeEach(() => {
            jestSpyOn(cookiesService, 'setCookie').mockClear();
            jestSpyOn(sessionApi, 'createSession').mockReturnValue(of({
                data: {
                    sessionReference: 'some-reference',
                    dateCreated: '1996-10-15T04:35:32.000Z',
                    expiryDate: '1996-10-15T15:35:32.000Z',
                    statusCode: 200
                },
                exception: null,
                hasError: false
             }));

        });

        it('Then a session cookie is set from the API response', (done) => {
            subject.createSession().subscribe();
            expect(cookiesService.setCookie).toHaveBeenCalledWith(ApplicationCookies.SESSION_COOKIE, {
                dateCreated:'1996-10-15T04:35:32.000Z',
                expiryDate: '1996-10-15T15:35:32.000Z',
                reference: 'some-reference'
            }, { expires: '1996-10-15T15:35:32.000Z', path: "/", sameSite: "strict", secure: true });

            done();
        });
});

虽然我似乎总是遇到同样的错误:

Error: expect(jest.fn()).toHaveBeenCalledWith(...expected)

- Expected
+ Received

  "mock-sessionCookie",
  Object {
-   "dateCreated": "1996-10-15T04:35:32.000Z",
-   "expiryDate": "1996-10-15T15:35:32.000Z",
+   "dateCreated": 1996-10-15T04:35:32.000Z,
+   "expiryDate": 1996-10-15T15:35:32.000Z,
    "reference": "some-reference",
  },
  Object {
-   "expires": "1996-10-15T15:35:32.000Z",
+   "expires": 1996-10-15T15:35:32.000Z,
    "path": "/",
    "sameSite": "strict",
    "secure": true,
  },

Number of calls: 1

我试过使用 date.parse('') 但这不起作用...做出此断言的正确方法是什么?我想不通。我不能像测试建议的那样只输入日期,因为它不是数字。

谢谢

可能会出现此问题,因为您对 mockReturnValue 的调用是 return 为日期而不是 Date 对象输入字符串。

因此尝试将 mockReturnValue 调用更改为 return 日期对象而不是字符串,例如

dateCreated: new Date('1996-10-15T04:35:32.000Z'),
expiryDate: new Date('1996-10-15T15:35:32.000Z'),