最近只是使用 Mock Service Worker 来测试我的 HTTP 请求,我正在寻找测试我的失败路径。
我的第一个测试通过(很高兴),但我收到的失败错误是“JSON 输入意外结束”
它确实以我想要的方式运行,但从测试的角度来看,我有点困惑。
我怎样才能让我的失败路径通过测试?
我的测试文件
import "whatwg-fetch";
import { rest } from "msw";
import { setupServer } from "msw/node";
import { collect } from "./collect";
const server = setupServer(
rest.get(
"http://api.openweathermap.org/data/2.5/weather",
(req, res, ctx) => {
return res(
ctx.status(200),
ctx.json({ base: "stations", clouds: { all: 6 }, cod: 200 })
);
}
)
);
beforeAll(() => server.listen());
afterAll(() => server.close());
afterEach(() => server.resetHandlers());
it("collects data", async () => {
const res = await collect();
expect(res).toEqual({ base: "stations", clouds: { all: 6 }, cod: 200 });
});
it("handles failure", async () => {
server.use(
rest.get(
"http://api.openweathermap.org/data/2.5/weather",
(req, res, ctx) => {
return res(ctx.status(401));
}
)
);
await expect(collect()).rejects.toThrow("401");
});
我的 fetch 异步功能
require('dotenv').config()
export const collect = async () => {
const key = process.env.REACT_APP_API_KE
// try{
const res = await fetch(`http://api.openweathermap.org/data/2.5/weather?q=london&appid=${key}`)
if(res.status !== 200){
const error = await res.json()
throw { message: error.message, status: error.cod }
}
const data = await res.json()
return data
}