标签: jsdom

如何使用react-test-library测试复选框

我正在使用最新版本的 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)

jsdom reactjs jestjs create-react-app react-testing-library

5
推荐指数
1
解决办法
6085
查看次数

Jest jsdom 协议“http:”不支持

我正在尝试使用 jest 运行一些集成测试以进行反应。运行测试时,我收到以下错误UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_PROTOCOL]: Protocol "http:" not supported. Expected "https:" 。最初,我虽然与 msw 模拟我的 api 调用有关,但即使在禁用 msw 服务器之后,我仍然遇到此错误。

我在我的应用程序中使用 axios 发出 http 请求,并且所有 URL 都设置为使用 HTTPS。我还在安装文件中告诉 jest 并jest.config在模拟 origin 时使用 https,但它仍然不起作用。还有什么想法我还可以尝试吗?

jsdom reactjs jestjs ts-jest msw

5
推荐指数
0
解决办法
418
查看次数

如何测试使用 React 测试库更改的 url 搜索?

我有一个对 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)

mocking jsdom reactjs jestjs react-testing-library

5
推荐指数
1
解决办法
2万
查看次数

使用 vitest 来测试基于历史记录的路由器时,如何重置 jsdom 实例?

我想使用 + 对基于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)

javascript jsdom svelte testing-library vitest

5
推荐指数
1
解决办法
742
查看次数

ws 在浏览器中不起作用。浏览器客户端必须使用本机 WebSocket 对象

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 安装程序
  • 玩笑图像快照
  • 笑话环境 jsdom

我期望启动 Chromium 并模拟网页上 Web 元素的操作。如何修复 Chromium 立即打开和关闭的错误?

chromium websocket jsdom jestjs puppeteer

5
推荐指数
1
解决办法
3791
查看次数

用jsdom加载ajax应用程序

我正在寻找一个解决方案来引导服务器上的客户端应用程序(用Backbone.js编写),这样我就可以为爬虫和非js消费者提供正确的内容.

我一直在玩jsdom和nodejs试图引导应用程序,并且可以在基本模板内容中加载它,但应用程序似乎永远不会启动.

我尝试了两种不同的解决方案,以确保我拥有所有必需的依赖项并且应用程序正确加载:

  1. 我尝试使用jsdom.env(),其中包含通常包含在内的所有脚本.
  2. 我尝试使用jsdom.jsdom()并确保FetchExternalResources,ProcessExternalResources和MutationEvents都是正确的.

似乎都没有触发window.onload事件.我想知道jsdom是否可能不会解决这个问题,或者可能会在通常被解雇后调用它的回调?

这是jsdom中可能的任务吗?

ajax node.js backbone.js jsdom

4
推荐指数
1
解决办法
2789
查看次数

node.js和jsdom - 无法检测到返回了http 500错误?

我正在使用带有node.js的jsdom,我试图让它为我提供一些http错误已经发生的迹象.我已经设置了一个测试服务器,只为所有请求返回一个http 500标头,但当我尝试使用jsdom加载它时,jsdom不会抛出任何错误,似乎没有提供任何可识别的信息返回了http 500错误.检测http 500错误的最佳方法是什么?

node.js jsdom

4
推荐指数
1
解决办法
1125
查看次数

jsdom:运行页面的 javascript 函数

我一直在搞 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)

javascript node.js jsdom

4
推荐指数
1
解决办法
5444
查看次数

jsdom.jsdom缺少"createWindow"方法

我正在尝试使用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()方法?

node.js jsdom

4
推荐指数
1
解决办法
6010
查看次数

当与Sinon假计时器一起使用时,为什么JSDOM会进入无限循环?

使用最新的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)

如何避免这种无限循环?

node.js jsdom sinon

4
推荐指数
1
解决办法
243
查看次数