我用开玩笑为我的api编写了测试。我在测试文件中添加了调用我的api的函数,如下所示:
import AuthManager from "../Client/Modules/Auth/AuthManager";
并按如下所示使用它:
test("login api resolves true", () => {
return expect(AuthManager.login("test", "test")).resolves.toMatchObject(
expect.objectContaining({
accessToken: expect.any(String),
email: expect.any(String),
expiresIn: expect.any(Number),
refreshToken: expect.any(String),
userFullName: expect.any(String),
userId: expect.any(Number)
})
);
});
我的测试通过了,但是出现以下错误:
错误:未实现:window.alert
如何解决这个问题?
答案 0 :(得分:3)
Jest
的{{3}}是jsdom
提供的类似浏览器的环境。
jsdom
实现了实际浏览器将提供的大部分功能(包括全局window
对象),但并未实现所有功能。
专门针对这种情况,jsdom
不实现window.alert
,而是在源代码default test environment中可以看到的情况下,在调用Error
时抛出alert
。 / p>
只要您知道代码为何启动Error
,并且知道测试在Error
之外还能正常工作,那么您可以通过提供一个空的实现来抑制window.alert
为test("login api resolves true", () => {
const jsdomAlert = window.alert; // remember the jsdom alert
window.alert = () => {}; // provide an empty implementation for window.alert
return expect(AuthManager.login("test", "test")).resolves.toMatchObject(
expect.objectContaining({
accessToken: expect.any(String),
email: expect.any(String),
expiresIn: expect.any(Number),
refreshToken: expect.any(String),
userFullName: expect.any(String),
userId: expect.any(Number)
})
); // SUCCESS
window.alert = jsdomAlert; // restore the jsdom alert
});
:
SELECT
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at ASC) AS RN,
user_id, created_at, followers_count,friends_count, statuses_count
FROM
dbo.master_users
WHERE
RN = 1
答案 1 :(得分:0)
我解决这个问题的方法实际上是在测试文件的顶部将window.alert
方法定义为一个玩笑。这适用于任何窗口方法(在我的情况下,我实际上是在测试window.open
)。
请确保在测试中调用mockClear()
,因为这是一个全局对象,并且其调用将在测试中持续存在。
window.alert = jest.fn();
test("login api resolves true", () => {
window.alert.mockClear();
/* ... */
})
答案 2 :(得分:0)
我遇到了window.confirm
这是我解决角向旋转的方法。
let spyOnWindow: jasmine.Spy;
beforeEach((() => {
TestBed.configureTestingModule({
declarations: [...],
imports: [...],
providers: [...]
}).compileComponents().then(() => {
...
spyOnWindow = spyOn(window,'confirm');
...
});
一些测试用例
it('showModal testing function with delete an event', () => {
spyOnWindow.and.returnValue(true);
...
}
it('showModal testing function with delete an event', () => {
spyOnWindow.and.returnValue(false);
...
}