Known issues
The Workers Vitest pool is currently in open beta. The following are issues Cloudflare is aware of and fixing:
Coverage
Native code coverage via V8 ↗ is not supported. You must use instrumented code coverage via Istanbul ↗ instead. Refer to the Vitest Coverage documentation ↗ for setup instructions.
Fake timers
Vitest’s fake timers ↗ do not apply to KV, R2 and cache simulators. For example, you cannot expire a KV key by advancing fake time.
Dynamic import()
statements with SELF
and Durable Objects
Dynamic import()
statements do not work inside export default { ... }
handlers when writing integration tests with SELF
, or inside Durable Object event handlers. You must import and call your handlers directly, or use static import
statements in the global scope.
Durable Object alarms
Durable Object alarms are not reset between test runs and do not respect isolated storage. Ensure you delete or run all alarms with runDurableObjectAlarm()
scheduled in each test before finishing the test.
Durable Objects and isolatedStorage
Using WebSockets with Durable Objects with the isolatedStorage
flag turned on is not supported. You must set isolatedStorage: false
in your vitest.config.ts
file.
Returning non-primitive values from RPC methods
In order to return non-primitive values (objects or classes extending RpcTarget
, for instance) from RPC methods, you must use the using
keyword. Refer to https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle#explicit-resource-management ↗ for more details. An example test ↗ is included in the workers-sdk
repository.