我正在尝试使用带有单个异步方法的类从网页获取HTML。我使用打字稿3.4.3,请求承诺4.2.4。
import * as rp from 'request-promise';
class HtmlFetcher {
public uri: string;
public html: string;
public constructor(uri: string) {
this.uri = uri;
}
public async fetch() {
await rp(this.uri).then((html) => {
this.html = html;
}).catch((error) => {
throw new Error('Unable to fetch the HTML page');
});
}
}
export { HtmlFetcher };
我使用以下代码在Jest 24.8.0中测试我的课程。第6行的地址仅用于测试目的,我也尝试过使用不同的URI。
import { HtmlFetcher } from './htmlFetcher.service';
describe('Fetch HTML', () => {
it('should fetch the HTMl at the given link', () => {
const uri = 'http://help.websiteos.com/websiteos/example_of_a_simple_html_page.htm';
const fetcher = new HtmlFetcher(uri);
fetcher.fetch();
expect(fetcher.html).toBeDefined();
});
});
我希望html
属性包含调用fetch()方法后从给定地址获取的HTML字符串。但是,测试代码失败,并记录fetcher.html
为undefined
。 Typescript,Jest和请求承诺文档没有提供任何帮助。我在做什么错了?
答案 0 :(得分:0)
感谢TKoL的评论,找到了答案,再看看我已经读过50次的文档,即:Jest async testing。我应该更仔细地进行RTFM ...
测试代码也必须是异步的。
import { HtmlFetcher } from './htmlFetcher.service';
describe('Fetch HTML', () => {
it('should fetch the HTMl at the given link', async () => { // Added async keyword
const uri = 'http://help.websiteos.com/websiteos/example_of_a_simple_html_page.htm';
const fetcher = new HtmlFetcher(uri);
await fetcher.fetch(); // Added await keyword
expect(fetcher.html).toBeDefined();
});
});