为什么我能够在node / jest中访问WebSocket本机浏览器对象?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我能够在node / jest中访问WebSocket本机浏览器对象?相关的知识,希望对你有一定的参考价值。
我有浏览器代码,它使用WebSocket aka的本机实现
var socket = new WebSocket('ws://localhost:8080')
虽然这个代码在我的浏览器中运行得很好,但我希望在用jest运行代码时它会失败。
但令人惊讶的是,我没有错误,它看起来效果非常好。我也很惊讶在控制台中没有任何更好的输出,我无法检查这个对象以查看我有权访问的内容。
test('should fail because I cannot see any WebSocket API in node.js doc', async () => {
await new Promise( resolve => {
const socket = new WebSocket('ws://localhost:8080')
socket.onopen = function( event ){
console.log( event )
console.log( socket )
console.log( socket.onopen )
resolve()
}
})
})
它产生以下输出:
console.log tests/socket/socket.test.js:5
Event { isTrusted: [Getter] }
console.log tests/socket/socket.test.js:6
WebSocket {}
console.log tests/socket/socket.test.js:7
[Function]
为什么这是开玩笑的?为什么我在jest中测试浏览器代码时不必使用像ws或socket.io这样的库? 这是因为开玩笑吗?
答案
默认情况下,Jest在JSDOM中运行你的测试,它实现了WebSocket
。见https://jestjs.io/docs/en/configuration#testenvironment-string
以上是关于为什么我能够在node / jest中访问WebSocket本机浏览器对象?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jest 进行测试时如何使用 `import.meta`
Supertest 在 Node 中进行 Jest 测试时出现 MaxListenersExceedingWarning 错误
在 Node + Express API 中检测到的打开句柄会阻止 Jest 退出
使用 Node 进行 Jest 测试 - 超时 - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调