我在文件中有一个API脚本
import cv2
img = cv2.imread('cropped.png')
grayscaled = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
retval, threshold2 = cv2.threshold(grayscaled,125,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imwrite('threshold.jpeg',threshold2)
print(pytesseract.image_to_string(Image.open('threshold.jpeg') , lang='eng', boxes=False,config='--psm 10 --eom 3 -c tessedit_char_whitelist=0123456789'))
当我模拟通话时,我在代码覆盖范围内有两条未覆盖的行。
任何想法我怎样才能让它们覆盖。
这是我到目前为止所尝试的无法正常工作
const ApiCall = {
fetchData: async (url) => {
const result = await fetch(url);
if (!result.ok) {
const body = await result.text(); // uncovered line
throw new Error(`Error fetching ${url}: ${result.status} ${result.statusText} - ${body}`); // uncovered line
}
return result.json();
},
};
export default ApiCall;
我对Jest有点新意,所以任何帮助都会很棒。
答案 0 :(得分:0)
您需要在测试规范中提供stubb响应,以便触发if语句。 https://www.npmjs.com/package/jest-fetch-mock将允许您这样做。他们的npm页面上的示例应该为您提供所需的内容https://www.npmjs.com/package/jest-fetch-mock#example-1---mocking-all-fetches
基本上结果存储在状态(redux)中并从那里调用。 jest-fetch-mock会覆盖你的api调用/路由,并在框架内的redux中返回存储的结果。
答案 1 :(得分:0)
假设你要测试的是ApiCall,那么你需要模拟fetch。你正在嘲笑整个ApiCall,所以这些行永远不会执行。
此外,您有一个问题,因为如果您发现错误或承诺拒绝,json()将不可用,以便该行将触发错误。
试试这个(没有测试过):
it('test error', (done) => {
let promise = Promise.reject(new Error("test"));
global.fetch = jest.fn(() => promise); //You might need to store the original fetch before swapping this
ApiCall.fetchData()
.catch(err => );
expect(err.message).toEqual("test");
done();
});
it('test OK', (done) => {
let promise = Promise.resolve({
json: jest.fn(() => {data: "data"})
});
global.fetch = jest.fn(() => promise);
ApiCall.fetchData()
.then(response => );
expect(response.data).toEqual("data");
done();
});
这可能不会马上起作用,但希望你能得到这个想法。在这种情况下,你已经在使用一个promise,所以看看我在测试中添加了done()回调,这样你就可以告诉jest你已经完成了处理。还有另一种方法可以让jest等待承诺,就像“return promise.then()”。
请回复