为什么我能够在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本机浏览器对象?的主要内容,如果未能解决你的问题,请参考以下文章