T
TanStack•3mo ago
fair-rose

Set up playwright tests: server.tsx imports a server side file

Hello, I am trying to set up Playwright tests in a TanStack Start application. I am using Apollo GraphQL server and client for fetching data, so I am preloading the Apollo Server in the server.tsx file:
import { createStartHandler, defaultStreamHandler } from '@tanstack/react-start/server'
import { createRouter } from './router'
import { getGraphQLServer } from '@/lib/graphql_server';

// Start Apollo GraphQL server on startup
await getGraphQLServer();

export default createStartHandler({
createRouter,
})(defaultStreamHandler)
import { createStartHandler, defaultStreamHandler } from '@tanstack/react-start/server'
import { createRouter } from './router'
import { getGraphQLServer } from '@/lib/graphql_server';

// Start Apollo GraphQL server on startup
await getGraphQLServer();

export default createStartHandler({
createRouter,
})(defaultStreamHandler)
The function needs to read the GraphQL schema file, I am doing this:
import path from "path";
import { fileURLToPath } from "url";
import { readFileSync } from "fs";

export async function getGraphQLServer() {
...
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const schemaPath = path.resolve(__dirname, "../graphql/schema.graphql");
const typeDefs = readFileSync(schemaPath, "utf-8");
...
import path from "path";
import { fileURLToPath } from "url";
import { readFileSync } from "fs";

export async function getGraphQLServer() {
...
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const schemaPath = path.resolve(__dirname, "../graphql/schema.graphql");
const typeDefs = readFileSync(schemaPath, "utf-8");
...
The issue starts as soon as the start command is executed:
[WebServer] > resanorp@1.0.0 start
[WebServer] > node .output/server/index.mjs
Listening on http://[::]:4000
[request error] [unhandled] [GET] http://localhost:4000/
H3Error: ENOENT: no such file or directory, open 'C:\Repos\ResanoRP\.output\graphql\schema.graphql'
[WebServer] at readFileSync (node:fs:442:20)
...
[WebServer] > resanorp@1.0.0 start
[WebServer] > node .output/server/index.mjs
Listening on http://[::]:4000
[request error] [unhandled] [GET] http://localhost:4000/
H3Error: ENOENT: no such file or directory, open 'C:\Repos\ResanoRP\.output\graphql\schema.graphql'
[WebServer] at readFileSync (node:fs:442:20)
...
Shall I patch the server.tsx import in a cumbersome way? Is there a better option?
1 Reply
fair-rose
fair-roseOP•3mo ago
Solved by moving the schema contents from the.graphql file to a typescript file and importing the schema as a string 😅 I don't know whether this is the best solution, but it works ...

Did you find this page helpful?