我正在使用最新版本的 create-react-app (在 package.json 中,“react”:“^17.0.1”)
我正在尝试使用react-test-library来测试一个应用程序,其中检查复选框会增加计数器。我已将问题归结为我能处理的最简单的形式。我试过 keyDown,点击...
文本需要 '2' 并收到 '0' :
组件文件:
import React, { useEffect, useState } from "react";
function App3() {
const [counter, setCounter]= useState(0);
const handleClickInCheckbox = (ev) => {
setCounter(2)
};
return (
<div className="App">
<input type="checkbox" onChange={handleClickInCheckbox} id="chkbx" data-testid="ch1" ></input>
<h1 data-testid="h1" >{counter}</h1>
</div>
);
}
export default App3;
Run Code Online (Sandbox Code Playgroud)
测试文件:
import React from 'react';
import { render, act, screen, fireEvent, getByRole} from '@testing-library/react'
import '@testing-library/jest-dom/extend-expect'
import App from '../App3'
describe ('app', () => { …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 jest 运行一些集成测试以进行反应。运行测试时,我收到以下错误UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_PROTOCOL]: Protocol "http:" not supported. Expected "https:" 。最初,我虽然与 msw 模拟我的 api 调用有关,但即使在禁用 msw 服务器之后,我仍然遇到此错误。
我在我的应用程序中使用 axios 发出 http 请求,并且所有 URL 都设置为使用 HTTPS。我还在安装文件中告诉 jest 并jest.config在模拟 origin 时使用 https,但它仍然不起作用。还有什么想法我还可以尝试吗?
我有一个对 url 搜索更改做出反应的组件,以及一个更改 url 搜索的按钮。我想测试当我单击按钮时,组件会做出相应的反应。这是一个codesandbox:https ://codesandbox.io/s/react-testing-library-url-change-test-b5zq1 。
应用程序.js
export default function App() {
const [urlChanged, setUrlChanged] = useState(false);
const handleURLSearchChange = () => {
window.location.search = new URLSearchParams({ foo: "bar" });
};
useEffect(() => {
if (window.location.search.length !== 0) {
setUrlChanged(true);
}
}, []);
return (
<div>
<button aria-label="change" onClick={handleURLSearchChange}>
Change URL search
</button>
<p aria-label="URL Status">{urlChanged ? "Changed!" : "Not yet"}</p>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
应用程序规范.js
describe("App", () => {
it("Reacts to url changes when touching the button", async …Run Code Online (Sandbox Code Playgroud) 我想使用 + 对基于svelte+page.js的路由器进行一些集成测试vitest,但我遇到了一个问题,即jsdom每个测试文件实例仅正确更新一次。
在以下设置中,当运行时.only或将每个测试拆分到其自己的文件中时,任一测试都会通过。但当它们按顺序运行时,第二个总是会失败。检查 DOM 发现screen.debug()它是空的,并且调用actortick似乎没有做任何事情。
我怀疑这与如何jsdom与 History API 交互有关,但我不知道从这里到哪里去。
根细
<script>
import page from 'page'
import SignIn from './SignIn/SignIn.svelte'
import Upload from './Upload/Upload.svelte'
import { authenticationToken } from './Root.stores.js'
let currentPage
page('/', () => {
page.redirect('/sign-in')
})
page('/sign-in', () => {
currentPage = SignIn
})
page('/upload', () => {
if ($authenticationToken === null) {
return page.redirect('/sign-in')
}
currentPage = Upload
}) …Run Code Online (Sandbox Code Playgroud) Node JS 应用程序在 JEST、Puppeteer 测试中出现 websocket 错误。Chromium 打开一秒钟,然后立即关闭。我在测试中没有使用 websocket,所以不确定为什么会发生附加错误。
启动网页的代码:
beforeEach( async() =>
{
browser = await launch({ headless: true, args: ['--no-sandbox','--disable-dev-shm-usage']});
page = await browser.newPage();
page.setViewport({ width: 1000, height: 750 });
await page.goto(app);
await page.waitForNavigation({ waitUntil: 'networkidle0',}); });
Run Code Online (Sandbox Code Playgroud)
错误“浏览器客户端必须使用本机 WebSocket 对象”的屏幕
验证所有开发依赖项均已就位:
我期望启动 Chromium 并模拟网页上 Web 元素的操作。如何修复 Chromium 立即打开和关闭的错误?
我正在寻找一个解决方案来引导服务器上的客户端应用程序(用Backbone.js编写),这样我就可以为爬虫和非js消费者提供正确的内容.
我一直在玩jsdom和nodejs试图引导应用程序,并且可以在基本模板内容中加载它,但应用程序似乎永远不会启动.
我尝试了两种不同的解决方案,以确保我拥有所有必需的依赖项并且应用程序正确加载:
似乎都没有触发window.onload事件.我想知道jsdom是否可能不会解决这个问题,或者可能会在通常被解雇后调用它的回调?
这是jsdom中可能的任务吗?
我正在使用带有node.js的jsdom,我试图让它为我提供一些http错误已经发生的迹象.我已经设置了一个测试服务器,只为所有请求返回一个http 500标头,但当我尝试使用jsdom加载它时,jsdom不会抛出任何错误,似乎没有提供任何可识别的信息返回了http 500错误.检测http 500错误的最佳方法是什么?
我一直在搞 jsdom ,我不知道如何从 html 页面运行函数。例如,我有一个像这样的简单页面:
<html>
<body>
Hello
</body>
<script>
function test() {
document.write("Bye bye")
}
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
我想test从 jsdom执行该函数。我该怎么做?我试过简单地调用该函数,但节点抱怨它不存在。
jsdom.env({
url : "http://localhost:8000/test.html",
features : {
FetchExternalResources : ['script'],
ProcessExternalResources : ['script']
},
done : function (error, window) {
test(); // I'd like to do something like this.
console.log(window.document.innerHTML);
}
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用jsdom来分析一些HTML内容.我见过的例子使用基于html内容的jsdom.jsdom文档的.createWindow()方法.
但是当我尝试按照这些示例时,我的文档没有.createWindow()方法.
var getaPage=function (req, res, callback) {
jsdom.defaultDocumentFeatures={
FetchExternalResources : ['script'],
ProcessExternalResources : ['script'],
MutationEvents : '2.0',
QuerySelector : false
};
var htmlDoc = '<html lang="en-US">' +
'</html>';
var tstDocument=jsdom.jsdom(htmlDoc);
for (var attr in tstDocument){
if (attr == 'createWindow') {
console.log('Found it');
}else{
console.log('not it');
};
};
};
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到了一堆'不是'而没有'找到它'.
为什么我没有.createWindow()方法?
使用最新的JSDOM(11.6.0),当与Sinon的伪计时器一起使用时,我遇到了一个无限循环。
const sinon = require('sinon');
sinon.useFakeTimers();
require('jsdom'); // This line creates an infinite loop
Run Code Online (Sandbox Code Playgroud)
如何避免这种无限循环?