出了什么问题
我正在尝试使用用户登录来编写基本的django样板。我正在使用pdf.js
处理登录流程。
我有一个传奇,它调用登录功能,该功能对服务器执行ping操作并获得令牌。传说处理所有错误处理。如果该调用失败,则错误将成功返回以做出反应并显示给用户。它可以正常工作。
我正在尝试为登录功能编写单元测试。我认为节点正在捕获我的错误:ssh-keygen -t ed25519 -C "your-email-id@gmail.com"
我想是因为saga在现实中抓住了它,所以节点不会抛出该错误。
这是否意味着我无法对登录功能应引发未捕获的错误进行单元测试?
我应该不麻烦测试吗?
代码
这是调用服务器的功能。
ssh-add ~/my-pc/Desktop/.ssh/ed25519
这就是处理逻辑的传奇。
react-saga
这是我的单元测试:
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
答案 0 :(得分:1)
您可以对其进行测试。 toThrow
方法用于捕获引发的错误,但是Promise拒绝错误,因此需要使用不同的API。为了同样捕获错误.rejects.toThrow();
,您应该await
结束期望块,从而导致:
describe("login function", () => {
let mock;
beforeEach(() => {
mock = new MockAdapter(axios);
localStorage.clear();
});
afterEach(() => {
// We need to clear mocks
// and remove tokens from local storage to prevent
// us from staying logged in
mock.restore();
});
test("Check that exception thrown on server error", async () => {
// Mock loggedin function to throw error
mock.onPost().reply(500);
Test that error is uncaught.
await expect(() => auth.login("test@example.com", "pass")).rejects.toThrow(); // add an error message to check for correct error
});
});
PS。 jest API docs中对此进行了详细记录。