开玩笑 - 调用 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'),
我正在尝试对根据我创建的 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'),