Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >试试使用 Vitest 进行组件测试,确实很香。

试试使用 Vitest 进行组件测试,确实很香。

作者头像
前端小智@大迁世界
发布于 2022-09-21 11:54:27
发布于 2022-09-21 11:54:27
2.4K01
代码可运行
举报
文章被收录于专栏:终身学习者终身学习者
运行总次数:1
代码可运行

新出了一个系列:Vue2与Vue3 技巧小册

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。

什么是Vitest?

自从 尤大 的构建工具Vite获得了巨大的人气,现在有了一个由它驱动的极快的单元测试框架。Vitest

Vitest 与 Jest 兼容,具有开箱即用的 ESM、Typescript 和 JSX 支持,并且由 esbuild 提供支持。它在测试过程中使用 Vite 开发服务器来转换你的文件,并监听你的应用程序的相同配置(通过vite.config.js),从而消除了使用Jest等测试替代品所涉及的重复工作。

为什么选择Vitest?

Vite是一个构建工具,旨在为现代 web 项目提供更快、更精简的开发体验,它开箱即用,支持常见的 web 模式、glob导入和 SSR 等功能。它的许多插件和集成正在促进一个充满活力的生态系统。

但这导致了一个新问题:如何在Vite上编写单元测试。

将Jest等框架与Vite一起使用,导致Vite和Jest之间有很多重复的配置,而 Vitest 解决了这一问题,它消除了为我们的应用程序编写单元测试所需的额外配置。Vitest 使用与 Vite 相同的配置,并在开发、构建和测试时共享一个共同的转换管道。它还可以使用与 Vite 相同的插件API进行扩展,并与Jest的API兼容,以方便从Jest迁移,而不需要做很多重构工作。

因此,Vitest 的速度也非常快。

如何使用 Vitest 来测试组件

安装 Vitest

在项目中使用 Vitest 需要 Vite >=v2.7.10Node >=v14 才能工作。

可以使用 npmyarnpnpm 来安装 Vitest,根据自己的喜好,在终端运行以下命令:

NPM

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install -D vitest

YARN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yarn add -D vitest

PNPM

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pnpm add -D vitest

Vitest 配置

安装完 Vitest 后,需要将其添加到 vite.config.js 文件中:

vite.config.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";

export default defineConfig({
    plugins: [vue()],
    //add test to vite config
    test: {
        // ...
    },
});

为 TypeScript 配置 Vitest 是类似的,但如果从 Vite 导入 defineConfig,我们需要在配置文件的顶部使用三斜线命令添加对 Vitest 类型的引用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <reference types="vitest" />
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
// https://vitejs.dev/config/

export default defineConfig({
    plugins: [vue()],
    test: {
        // ...
    },
});

值得注意的是,Vitest 也可以在项目中通过在根文件夹中添加 vitest.config.js 文件来配置。如果这个文件存在,它将优先于 vite.config.js 来配置Vitest。Vitest 也允许额外的配置,可以在配置页面中找到。

事例演示:Notification

为了看看Vitest的运作情况,我们创建一个显示三种类型通知的通知组件:infoerror 和success。这个组件的每个状态如下所示:

info

error

success

notification.vue 内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div
    :class="[
      'notification',
      type === 'error' ? 'notification--error' : null,
      type === 'success' ? 'notification--success' : null,
      type === 'info' ? 'notification--info' : null,
      message && message.length > 0 ? 'notification--slide' : null,
    ]"
  >
    <img
      src="https://res.cloudinary.com/djalafcj9/image/upload/v1634261166/getequityV2/denied_sbmv0e.png"
      v-if="type === 'error'"
    />
    <img
      src="https://res.cloudinary.com/djalafcj9/image/upload/v1656690265/getequityV2/Frame_irxz3e.png"
      v-if="type === 'success'"
    />
    <img
      src="https://res.cloudinary.com/djalafcj9/image/upload/v1634261166/getequityV2/pending_ctj1ke.png"
      v-if="type === 'info'"
    />
    <p class="notification__text">
      {{ message }}
    </p>
    <button
      ref="closeButton"
      class="notification__button"
      @click="$emit('clear-notification')"
    >
      <img
        src="https://res.cloudinary.com/djalafcj9/image/upload/v1635485821/getequityV2/close_muxdyb.png"
      />
    </button>
  </div>
</template>
<script>
  export default {
    name: "Notification",
    emits: ['clear-notification'],
    props: {
      type: {
        type: String,
        default: null,
      },
      message: {
        type: String,
        default: null,
      },
    },
  };
</script>

<style>
  .notification {
    transition: all 900ms ease-out;
    opacity: 0;
    z-index: 300001;
    transform: translateY(-100vh);
    box-sizing: border-box;
    padding: 10px 15px;
    width: 100%;
    max-width: 730px;
    /* margin: 0 auto; */
    display: flex;
    position: fixed;
    /* left: 0; */
    top: 20px;
    right: 15px;
    justify-content: flex-start;
    align-items: center;
    border-radius: 8px;
    min-height: 48px;
    box-sizing: border-box;
    color: #fff;
  }

  .notification--slide {
    transform: translateY(0px);
    opacity: 1;
  }

  .notification--error {
    background-color: #fdecec;
  }

  .notification__text {
    margin: 0;
    margin-left: 17px;
    margin-right: auto;
  }

  .notification--error .notification__text {
    color: #f03d3e;
  }

  .notification--success {
    background-color: #e1f9f2;
  }

  .notification--success > .notification__text {
    color: #146354;
  }

  .notification--info {
    background-color: #ffb647;
  }

  .notification__button {
    border: 0;
    background-color: transparent;
  }
</style>

在这里,我们使用 message prop创建了一个显示动态消息的组件。我们还利用 type prop 来设计这个组件的背景和文本,并利用这个 type prop 显示我们计划的不同图标(error, success, info)。

最后,我们有一个按钮,用来通过发出一个自定义事件:clear-notification来解除通知。

我们应该测试什么?

现在我们对需要测试的组件的结构有了了解,我们可以再思考一下,这个组件需要做什么,以达到预期的功能。

我们的测试需要检查以下内容:

  • 该组件根据通知类型渲染出正确的样式。
  • message 为空时,通知就会逐渐消失。
  • 当关闭按钮被点击时,该组件会发出一个事件。

为了测试这些功能,在项目中添加一个 notification.test.js 用于测试。

安装测试依赖项

在编写单元测试时,可能会有这样的情况:我们需要用一个什么都不做的假组件来替换组件的现有实现。这被称为 stub(存根),为了在测试中使用存根,我们需要访问Vue Test Utils的mount方法,这是Vue.js的官方测试工具库

现在我们来安装Vue Test Utils。

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install --save-dev @vue/test-utils@next

# or

yarn add --dev @vue/test-utils@next

现在,在我们的测试文件中,我们可以从"@vue/test-utils"导入 mount

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { mount } from "@vue/test-utils";

在测试中,我们还需要能够模拟 DOM。Vitest目前同时支持 happy-domjsdom。对于这个演示,我们将使用happy-dom,然后安装它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yarn add happy-dom --dev

安装后,我们可以在测试文件的顶部添加以下注释...

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @vitest-environment happy-dom
 */

.或者将此添加到 vite/vitest 配置文件中,以避免在有多个需要 happy-dom 工作的测试文件时出现重复情况。

vite.config.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
// https://vitejs.dev/config/
export default defineConfig({
    plugins: [vue()],
    test: {
        environment: "happy-dom",
    },
});

因为我们只有一个测试文件,所以我们可以选择第一个选项,所以我们测试文件内容如下:

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @vitest-environment happy-dom
 */

import { mount } from "@vue/test-utils";

有了这些依赖关系,我们现在可以导入我们要测试的组件。

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @vitest-environment happy-dom
 */

import { mount } from "@vue/test-utils";
import notification from "../components/notification.vue";

常见的Vitest方法

为了编写测试,我们需要利用以下常见的方法,这些方法可以从 Vitest 导入。

  • describe:这个函数接受一个名字和一个函数,用于将相关的测试组合在一起。当你为一个有多个测试点(如逻辑和外观)的组件编写测试时,它就会很方便。
  • test/it:这个函数代表被测试的实际代码块。它接受一个字符串,通常是测试案例的名称或描述(例如,渲染成功的正确样式)和另一个函数,所有的检查和测试在这里进行。
  • expect: 这个函数用于测试值或创建断言。它接受一个预期为实际值(字符串、数字、对象等)的参数x,并使用任何支持的方法对其进行评估(例如toEqual(y),检查 x 是否与 y 相同)。

因此,我们现在将这些导入我们的测试文件中

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @vitest-environment happy-dom
 */

import { mount } from "@vue/test-utils";
import notification from "../components/notification.vue";
import { describe, expect, test } from "vitest";

有了这些函数,我们开始构建我们的单元测试。

建立 Vitest 单元测试

首先使用 describe 方法将测试分组。

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
describe("notification.vue", () => {
    
});

describe 块内,我们添加每个实际的测试。

我们第一个要测试的用例是:组件根据通知类型渲染出正确的样式

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
describe("notification.vue", () => {
    test("renders the correct style for error", () => {

    });
});

renders the correct style for error 表示 test 所检查的内容的 name。它有助于为代码块检查的内容提供上下文,这样就可以由原作者以外的人轻松维护和更新。它也使人们容易识别一个特定的失败的测试案例。

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
describe("notification.vue", () => {
    test("renders the correct style for error", () => {
       const type = "error";
    });
});

在我们组件中,定义了一个 type 参数,它接受一个字符串,用来决定诸如背景颜色、图标类型和文本颜色在组件上的渲染。在这里,我们创建一个变量 type,并将我们正在处理的类型之一,error (error, info, 或 success)分配给它。

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
describe("notification.vue", () => {
    test("renders the correct style for error", () => {
        const type = "error";
        const wrapper = mount(notification, {
            props: { type },
        });
    });
});

在这里,我们使用 mount 来存根我们的组件,以便进行测试。

mount 接受组件作为第一个参数,接受一个选项列表作为第二个参数。这些选项提供了不同的属性,目的是确保你的组件能在浏览器中正常工作。

在这个列表中,我们只需要 props 属性。我们使用这个属性是因为我们的 notification.vue组件至少需要一个 prop 才能有效工作。

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
describe("notification.vue", () => {
    test("renders the correct style for error", () => {
        const type = "error";
        const wrapper = mount(notification, {
            props: { type },
        });
        expect(wrapper.classes()).toEqual(
            expect.arrayContaining(["notification--error"])
        );
    });
});

在这一点上,剩下的就是写一个断言,或者更好的是,写出我们组件的预期行为,即:renders the correct style for error

为了做到这一点,我们使用了 expect 方法。它接受我们的存根组件和所有的选项(在我们的例子中,我们把它命名为wrapper以方便参考)。

这个方法可以被链接到其他一些方法上,但是对于这个特定的断言,我们要重新检查组件的类列表是否返回一个包含这个 notification——error 的数组。。

我们使用 classes 函数来实现这一点,该函数返回包含该组件所有类的数组。在这之后,下一件事就是使用 toEqual 函数进行比较,它检查一个值 X 是否等于 Y。在这个函数中,我们检查它是否返回一个包含我们的类的数组: notification--error

同样,对于 type 为 successinfo 类型,测试过程也差不多。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { mount } from "@vue/test-utils";
import notification from "../components/notification.vue";
import { describe, expect, test } from "vitest";
describe("notification.vue", () => {
    test("renders correct style for error", () => {
        const type = "error";
        const wrapper = mount(notification, {
            props: { type },
        });
        expect(wrapper.classes()).toEqual(
            expect.arrayContaining(["notification--error"])
        );
    });

    test("renders correct style for success", () => {
        const type = "success";
        const wrapper = mount(notification, {
            props: { type },
        });
        expect(wrapper.classes()).toEqual(
            expect.arrayContaining(["notification--success"])
        );
    });

    test("renders correct style for info", () => {
        const type = "info";
        const wrapper = mount(notification, {
            props: { type },
        });
        expect(wrapper.classes()).toEqual(
            expect.arrayContaining(["notification--info"])
        );
    });

    test("slides down when message is not empty", () => {
        const message = "success";
        const wrapper = mount(notification, {
            props: { message },
        });
        expect(wrapper.classes()).toEqual(
            expect.arrayContaining(["notification--slide"])
        );
    });
});

到这,我们已经写好了测试,以确保我们的通知是根据其类型来进行样式设计的。当用户点击组件上的关闭按钮时,我们会重置 message 参数。根据我们的代码,我们要根据这个 message 参数的值来添加或删除 notification--slide 类,如下所示:

notification.vue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div
    :class="[
      'notification',
      type === 'error' ? 'notification--error' : null,
      type === 'success' ? 'notification--success' : null,
      type === 'info' ? 'notification--info' : null,
      message && message.length > 0 ? 'notification--slide' : null,
    ]"
  >
//...

如果我们要测试这个特定的断言,它的内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test("slides up when message is empty", () => {
        const message = "";
        const wrapper = mount(notification, {
            props: { message },
        });
        expect(wrapper.classes("notification--slide")).toBe(false);
    });

在这段测试代码中,我们用一个空字符串创建一个 message 变量,并把它作为一个 prop 传递给我们的组件。

之后,我们检查我们组件的类数组,确保它不包括 notification--slide 类,该类负责使我们的组件向下/向外滑动到用户的视图。为了做到这一点,我们使用 toBe 函数,它接收一个值A,并试图检查它是否与 B 相同。

我们还想测试一下,每当组件上的按钮被点击,它就会发出一个事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test("emits event when close button is clicked", async() => {
        const wrapper = mount(notification, {
            data() {
                return {
                    clicked: false,
                };
            },
        });
        const closeButton = wrapper.find("button");
        await closeButton.trigger("click");
        expect(wrapper.emitted()).toHaveProperty("clear-notification");
    });

在这个测试块中,我们使用了一个 async 函数,因为我们将触发一个事件,它返回一个 Promise,我们需要等待这个 Promise 的解决,以便捕捉这个事件所引起的变化。我们还使用了data函数,并添加了一个 clicked 属性,当点击时将被切换。

到这,我们需要触发这个点击事件,我们首先通过使用 find 函数来获得按钮。这个函数与querySelector相同,它接受一个类、一个id或一个属性,并返回一个元素。

在找到按钮后,使用 trigger 方法来触发一个点击事件。这个方法接受要触发的事件名称(click, focus, blur, keydown等),执行这个事件并返回一个 promise。出于这个原因,我们等待这个动作,以确保在我们根据这个事件做出断言之前,已经对我们的DOM进行了改变。

最后,我们使用返回一个数组的 [emitted](https://test-utils.vuejs.org/api/#emitted) 方法检查我们的组件所发出的事件列表。然后我们检查这个数组是否包括 clear-notification 事件。

最后,我们测试以确保我们的组件渲染出正确的消息,并传递给 message prop。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test("renders message when message is not empty", () => {
        const message = "Something happened, try again";
        const wrapper = mount(notification, {
            props: { message },
        });
        expect(wrapper.find("p").text()).toBe(message);
    });

这里,我们创建了一个 message 变量,给它分配了一个随机字符串,并把它作为一个 prop 传递给我们的组件。

然后,我们使用 p 标签搜索我们的消息文本,因为这里是显示消息的地方,并检查其文本是否与 message 相同。

我们使用 text 方法提取这个标签的内容,这和 innerText很相似。最后,我们使用前面的函数 toBe 来断言这个值与 message 相同。

完整的测试文件

在涵盖所有这些之后,下面是完整的测试文件内容:

notification.test.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @vitest-environment happy-dom
 */

import { mount } from "@vue/test-utils";
import notification from "../components/notification.vue";
import { describe, expect, test } from "vitest";

describe("notification.vue", () => {
    test("renders the correct style for error", () => {
        const type = "error";
        const wrapper = mount(notification, {
            props: { type },
        });
        expect(wrapper.classes()).toEqual(
            expect.arrayContaining(["notification--error"])
        );
    });

    test("renders the correct style for success", () => {
        const type = "success";
        const wrapper = mount(notification, {
            props: { type },
        });
        expect(wrapper.classes()).toEqual(
            expect.arrayContaining(["notification--success"])
        );
    });

    test("renders the correct style for info", () => {
        const type = "info";
        const wrapper = mount(notification, {
            props: { type },
        });
        expect(wrapper.classes()).toEqual(
            expect.arrayContaining(["notification--info"])
        );
    });

    test("slides down when message is not empty", () => {
        const message = "success";
        const wrapper = mount(notification, {
            props: { message },
        });
        expect(wrapper.classes()).toEqual(
            expect.arrayContaining(["notification--slide"])
        );
    });

    test("slides up when message is empty", () => {
        const message = "";
        const wrapper = mount(notification, {
            props: { message },
        });
        expect(wrapper.classes("notification--slide")).toBe(false);
    });

    test("emits event when close button is clicked", async() => {
        const wrapper = mount(notification, {
            data() {
                return {
                    clicked: false,
                };
            },
        });
        const closeButton = wrapper.find("button");
        await closeButton.trigger("click");
        expect(wrapper.emitted()).toHaveProperty("clear-notificatioon");
    });

    test("renders message when message is not empty", () => {
        const message = "Something happened, try again";
        const wrapper = mount(notification, {
            props: { message },
        });
        expect(wrapper.find("p").text()).toBe(message);
    });
});

有几件事需要注意:

  • 我们利用 mount 来存根我们要测试的组件,它是由Vue Test Utils提供的。 (yarn add --dev @vue/test-utils@next)

运行测试

现在已经完成了测试的编写,需要运行它们。要实现这一点,我们去 package.json在我们的scripts 部分添加以下几行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"scripts": {
    "test": "vitest",
    "coverage": "vitest run --coverage"
},

如果在终端运行 yarn vitestyarn test,我们的测试文件就会被运行,我们应该看到测试结果和故障。

到这,我们已经成功地使用Vitest运行了我们的第一次测试。从结果中需要注意的一点是,由于Vitest的智能和即时观察模式,这个命令只需要运行一次,并在我们对测试文件进行更新和修改时被重新运行。

总结

使用 Vitest 对我们的应用程序进行单元测试是无缝的,与Jest等替代品相比,需要更少的步骤来启动和运行。Vitest 还可以很容易地将现有的测试从 Jest 迁移到Vitest,而不需要进行额外的配置。

作者:Timi Omoyeni 译者:前端小智 来源:vuemastery

原文:https://www.vuemastery.com/bl...

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug

交流

本文 GitHub https://github.com/qq44924588... 已收录,有一线大厂面试完整考点、资料以及我的系列文章。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
网线 – RJ45接口线序[通俗易懂]
大概做法: 准备网线钳子,把网线皮剥开,然后按照线序排列好,修剪铜线长度,塞入水晶头(有伸缩白条的地方朝下),用钳子压紧,最后用测线器测两头是否1-8点同步(从1开始,8结束)。
全栈程序员站长
2022/09/30
8760
网线 – RJ45接口线序[通俗易懂]
网络知识:水晶头网线和网线插座接法制作过程介绍
我们这里所说的网线插座,正确的叫法应该是网线模块,一般应用在室内的墙壁上作为网线插孔。
小明互联网技术分享社区
2022/02/17
1.6K0
网络知识:水晶头网线和网线插座接法制作过程介绍
给网线接水晶头
首先,我们要准备好工具和材料,测线器、网线钳,网线、水晶头、剥线器。如果找不到或者没有剥线器,可以选择用网线钳代替剥线器。
伪君子
2018/09/14
1.3K0
给网线接水晶头
568A线序是什么_水晶头a类线序
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
6650
5分钟搞懂网线的水晶头超5类和6类的区别
5类水晶头的8根线芯是一字排开的,而6类水晶头的8根线芯是呈现上、下交错的形式排列。
杰哥的IT之旅
2021/09/03
24.8K0
rj45口的485线如何连接_rj45接口485怎么接
我们常见的网线是586,有A、B标准,一般记住其中一个标准就可以了,另外一个标准只是1、3(发送),2、6(接收)的线序颠倒一下而已。关于586B标准,我们老师给了我们一个口诀:“橙蓝绿棕白在前,3、5对调”。具体的线序是
全栈程序员站长
2022/09/30
7.5K0
rj45口的485线如何连接_rj45接口485怎么接
网线之RJ45接口定义及网线线序[通俗易懂]
常见的RJ45接口有两类:用于以太网网卡、路由器以太网接口等的DTE类型,还有用于交换机等的DCE类型。
全栈程序员站长
2022/09/30
33.1K0
网线之RJ45接口定义及网线线序[通俗易懂]
学测——网络综合布线事项
实操 制作1根六类非屏蔽铜缆跳线,T568A-T568B(交叉线)线序,长度400毫米(40厘米); 制作1根六类非屏蔽铜缆跳线,T568A-T568A(直通线)线序,长度500毫米(50厘米); 任选2组链路,使用超五类双绞线,按照T568B线序,完成2组测试链路的布线和模块端接。 使用Φ20PVC线管(长度大于70cm)、管卡、信息点底盒进行安装。在Φ20PVC线管中铺设2根超五类双绞线。 其中一根一端端接在网络配线架的6号端口,另外一端端接RJ45模块,并且安装在双口面板的左侧端口上。 另外一根一端端接在网络配线架的12号端口,另外一端端接RJ45模块,并且安装在双口面板的右侧端口上。
用户7162790
2022/03/23
5730
学测——网络综合布线事项
poe网线水晶头接法顺序_水晶头和网络插座接线是一样的吗
上图为家用网络水晶头568-B的接法。我们生活办公网络中常见的水晶头,还有另外一种接法是568-A的接法我们生活中不用到,所以就不讲解先。
全栈程序员站长
2022/09/30
6.7K0
poe网线水晶头接法顺序_水晶头和网络插座接线是一样的吗
网卡自适应带来的麻烦
      碰到一个比较麻烦的问题,同事原来的计算机上网正常,买了新的笔记本,插上原来的网线,一拨号就是987号错误,说没有响应。我把自己的机子接那根网线,也是同样的问题。而且把新机子搬到邻居家却可以正常上网。看来只能怀疑网线的问题了。他的旧机子是IBM的R51,网卡刚好是支持自适应线序的,而新机子的网卡是realtak的,不支持。原因基本确定,电信暂时来不了,我就试图重做线头,更换线序,看能否撞上。结果做了56个头都失败,因为这种自适应居然可以8根线任意顺序。      其间倒是把线序搞得很熟了。标准的线
用户1075292
2018/01/23
1.3K0
直通线与交叉线:它们的区别与使用场景
直通线的两端接线顺序是相同的,即两端都采用同一种标准(T568A或T568B)。 无论采用哪种标准,直通线的两端都必须一致。
用户5921339
2025/05/20
5010
直通线与交叉线:它们的区别与使用场景
网络芯片Auto MDI-X
交叉线(crossover cable):一头是568A标准,另外一头是568B标准。
徐师兄
2022/08/29
1.1K0
网络芯片Auto MDI-X
rj45 千兆接口定义_网线的RJ45接口的针脚定义「建议收藏」
我们生活中常用的网线接头类型分为两类:用于连接到网络中的终端设备的DTE类型,如连接到PC机的网卡的网线属于DTE型。还有用于网络设备间连接的DCE类型,如路由器连接到交换机的线或交换机连接到交换机的线均属于DCE型。
全栈程序员站长
2022/07/25
6.8K0
RJ45网线接口_千兆网线水晶头接几根线
RJ45接口通常用于数据传输,最常见的应用为网卡接口。RJ45是各种不同接头的一种类型(例如:RJ11也是接头的一种类型,不过它是电话上用的)。
全栈程序员站长
2022/09/28
1.1K0
RJ45网线接口_千兆网线水晶头接几根线
第二章:软件工程师必备的网络基础
天蝎座的程序媛
2023/10/17
3180
第二章:软件工程师必备的网络基础
网线RJ45接口排线示意图(做网线备用)「建议收藏」
RJ45有两种绕线方式,T-568A和T-568B。 注意:绝大多数设备用的都是T-568B!!!请参照T-568B的线序!!!
全栈程序员站长
2022/09/30
16K0
网线RJ45接口排线示意图(做网线备用)「建议收藏」
网络知识 -- 第二部
  核心层:核心层的功能主要是实现骨干网络时间的优化传输,骨干层设计任务的重点通常是冗余能力,可靠性和高速的传输.
Wyc
2018/09/11
7110
网络知识 -- 第二部
网络RJ45接口详解[通俗易懂]
图 1 RJ45模块 RJ45模块用于实现PHY之间的互连,包括PHY芯片经信号变压器与RJ45接口相连,如图 1所示。 RJ45连接器由插头和插座组成,RJ45插头又称水晶头,如图 3-10所示。这两种元件组成的连接器连接于导线之间,以实现导线的电气连续性。RJ45连接器就是连接器中的最重要的一种插座。RJ45插座分屏蔽型和非屏蔽型两种。 RJ是Registered Jack的缩写,意思是“注册的插座”。在FCC(美国联邦通信委员会标准和规章)中的定义是,RJ是描述公用电信网络的接口,常用的有RJ-11和RJ-45,计算机网络的RJ-45是标准8位模块化接口的俗称。
全栈程序员站长
2022/09/30
8.5K0
网络RJ45接口详解[通俗易懂]
计算机网络笔记 —— 物理层 1
物理层上数据是以信号的方式传输的 信号是数据的电气或电磁表现,信号分为模拟信号和数字信号
YingJoy_
2018/08/02
5840
计算机网络笔记  —— 物理层 1
以太网RJ45 接线标准 线序(备忘)「建议收藏」
RJ是Registered Jack的缩写,意思是“注册的插座”。在 FCC(美国联邦通信委员会标准和规章)中的定义是,RJ是描述公用电信网络的接口,常用的有 RJ-11和 RJ-45, 计算机网络的RJ-45是标准8位模块化接口的俗称。
全栈程序员站长
2022/09/29
2.2K0
以太网RJ45 接线标准 线序(备忘)「建议收藏」
推荐阅读
相关推荐
网线 – RJ45接口线序[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验