小编Kla*_*ark的帖子

React - Jest - 测试 preventDefault Action

我不知道如何测试按键按下事件并防止默认。测试到达代码但从preventDefault未被调用:Received number of calls: 0

反应组件- App.js

  const onKeyDown = e => {
      console.log("==== TEST REACHED HERE ====")
      e.preventDefault(); // NEVER CALLED ???
  };
  useEffect(() => {
    document.addEventListener("keydown", onKeyDown, false);
    return () =>
      document.removeEventListener("keydown", onKeyDown, false);
  }, []);
Run Code Online (Sandbox Code Playgroud)

单元测试

it("should prevent default action on key down", () => {
   const { getByRole } = render(<App {...props} />);
   const grid = getByRole("app");
   const mockEvent = { preventDefault: jest.fn() };
   fireEvent.keyDown(grid, mockEvent);
   expect(mockEvent.preventDefault).toHaveBeenCalledTimes(1);
});
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

unit-testing reactjs jestjs react-testing-library

8
推荐指数
2
解决办法
1445
查看次数

SSR:带有动态导入的 true prop 有什么好处?

动态导入组件与以下内容有什么区别ssr: true

const DynamicButton = dynamic(() => import('./Button').then((mod) => mod.Button), {
  ssr: true,
});
Run Code Online (Sandbox Code Playgroud)

和普通的组件导入:

import { Button } from './Button';
Run Code Online (Sandbox Code Playgroud)
  • 一种相对于另一种有什么好处?
  • 我们把负载放在哪里?
  • 对于下面的场景(JSX 示例),如果showButtonfalse,我们是否仍然加载DynamicButton以及加载到哪里?

// jsx
return showButton && <DynamicButton />
Run Code Online (Sandbox Code Playgroud)

javascript jsx reactjs next.js

8
推荐指数
1
解决办法
3632
查看次数

VSCode-Chrome调试-未验证的断点

我在调试.ts文件中的角度组件时遇到问题。我正在使用VSCode和Debugger for Chrome扩展程序。

这是我的vscode启动文件:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "chrome",
            "request": "launch",
            "name": "Launch Chrome",
            "url": "http://localhost:5000",
            "sourceMaps": true, 
            "webRoot": "${workspaceRoot}"        
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的tsconfig.json文件:

{
  "compile": true,
  "comments":true,
  "module": "none",
  "target": "es5",
  "sourceMap": true,
  "sourceRoot": "",
  "mapRoot": "",
  "declaration": false
}
Run Code Online (Sandbox Code Playgroud)

在角度组件内部,我在$ onInit周期中设置了一个断点:

$onInit = () => {
  for(let i = 0; i < 5; i++) { //here I put breakpoint
    let t = i;
  }
}
Run Code Online (Sandbox Code Playgroud)

Debus成功启动(chrome打开),但没有任何反应。在我的编辑器中,如果我将鼠标悬停在断点上,则工具提示会显示一条消息:未 验证的断点。设置断点但尚未绑定

我正在使用1.24.1版本的vscode。

javascript visual-studio-code

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

单独文件夹中的 Webpack 块

我想在我的应用程序中实现代码拆分功能。我按路线拆分我的应用程序,并为我用户require.ensure导入组件的每条路线拆分。我尝试将所有块放在块文件夹中,因此我更改了配置文件中的输出:

output: {
   filename: "chunks/bundle[name].js"
}
Run Code Online (Sandbox Code Playgroud)

但是我收到了 404 错误。

错误:在 HTMLScriptElement.onScriptComplete 加载块 2 失败

所以我把它留在我有捆绑文件的文件夹中:

var webpack = require("webpack");
module.exports = {
    entry: "./js/app.js",
    output: {
        filename: "./bundle.js"
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: "vue-loader"
            },
            {
                test: /\.js$/,
                loader:"babel-loader"                
            },
            {
                test: /\.css$/,
                loader: "style-loader!css-loader"
            },
            {
                test: /\.(eot|svg|ttf|woff|woff2)(\?\S*)?$/,
                loader: "file-loader?name=element-ui/[name].[ext]"
            }       
        ]
    },
    resolve: {
        extensions: [ ".json", ".js", ".vue", ".css" ]
    },
    watch: true
};
Run Code Online (Sandbox Code Playgroud)

现在可以工作,但我得到了这样的块结构:文件夹块结构。如何仅在一个文件夹中移动所有块。这是使用代码拆分功能的正确方法。

我想我错过了一些东西。请帮忙!

webpack webpack-2

3
推荐指数
1
解决办法
6849
查看次数