@@ -25,6 +25,18 @@ const SAMPLE_HTML = `<!doctype html>
|
25 | 25 | </body> |
26 | 26 | </html>`; |
27 | 27 | |
| 28 | +type ReadabilityResult = Awaited< |
| 29 | +ReturnType<ReturnType<typeof createReadabilityWebContentExtractor>["extract"]> |
| 30 | +>; |
| 31 | + |
| 32 | +function requireReadabilityResult(result: ReadabilityResult): NonNullable<ReadabilityResult> { |
| 33 | +expect(result).toBeDefined(); |
| 34 | +if (!result) { |
| 35 | +throw new Error("expected readability extraction result"); |
| 36 | +} |
| 37 | +return result; |
| 38 | +} |
| 39 | + |
28 | 40 | describe("web readability extractor", () => { |
29 | 41 | it("extracts readable text", async () => { |
30 | 42 | const extractor = createReadabilityWebContentExtractor(); |
@@ -33,8 +45,9 @@ describe("web readability extractor", () => {
|
33 | 45 | url: "https://example.com/article", |
34 | 46 | extractMode: "text", |
35 | 47 | }); |
36 | | -expect(result?.text).toContain("Main content starts here"); |
37 | | -expect(result?.title).toBe("Example Article"); |
| 48 | +const extracted = requireReadabilityResult(result); |
| 49 | +expect(extracted.text).toContain("Main content starts here"); |
| 50 | +expect(extracted.title).toBe("Example Article"); |
38 | 51 | }); |
39 | 52 | |
40 | 53 | it("extracts readable markdown", async () => { |
@@ -44,7 +57,8 @@ describe("web readability extractor", () => {
|
44 | 57 | url: "https://example.com/article", |
45 | 58 | extractMode: "markdown", |
46 | 59 | }); |
47 | | -expect(result?.text).toContain("Main content starts here"); |
48 | | -expect(result?.title).toBe("Example Article"); |
| 60 | +const extracted = requireReadabilityResult(result); |
| 61 | +expect(extracted.text).toContain("Main content starts here"); |
| 62 | +expect(extracted.title).toBe("Example Article"); |
49 | 63 | }); |
50 | 64 | }); |