一分钟食用前端测试框架Jest

jest测试基础(入门) jest测试基础(入门) jest模拟方法 为什么要使用Mock函数? 在项目中,一个模块的方法内常常会去调用另外一个模块的方法。在单元测试中,我们可能并不需要关心内部调用的方法的执行过程和结果,只想知道它是否被正确调用即可,甚至会指定该函数的返回值。此时,使用Mock函数是十分有必要。 Jest 中的三个与 Mock 函数相关的API,分别是jest.fn()、jest.spyOn()、jest.mock(). jest.fn const myMock = jest.fn(); conso 阅读详情

                                                 

安装

其实食用Jest是很简单的,我们只需要安装Jest即可

npm install --save-dev jest

yarn add --dev jest

pnpm add --save-dev jest

ESmodule

本身来说,Jest是不支持Esmodule的,他支持CommonJS,我们需要Babel改一下

npm i --save-dev babel-jest @babel/core @babel/preset-env

然后创建.babel.rc或babel.config.js,编写以下代码

module.exports = {
    // 智能预设,编译ES6语法
    presets: [
        [
            "@babel/preset-env",
            {
                targets: {
                    "node": "current",
                }
            }
        ],
    ],
};

就可以使用ESmodule语法了 

代码

然后,我们就可以编写你需要测试的代码了

例如我们自己编写一个main文件,包含几个函数,两个数的加减乘除等,然后测试看看会不会通过

const add = function (a, b) {
    return a + b;
}

const minus = function (a, b) {
    return a - b;
}
const multiply = function (a, b) {
    return a * b
}
const divide = function (a, b) {
    return a / b
}


export {
    add,
    minus,
    multiply,
    divide,
}

我们写了几个函数,并暴露出了相应的方法

测试

编写文件main.test.js,并编写测试代码

import {add, minus, multiply, divide} from "./main";

// 测试加法
test('adds 1 + 2 to equal 3', () => {
    expect(add(1, 2)).toBe(3);
});

// 测试减法
test('minus 2 - 1 to equal 1', () => {
    expect(minus(2, 1)).toBe(1);
});

// 测试乘法
test('multiply 1 * 2 to equal 2', () => {
    expect(multiply(1, 2)).toBe(2);
});

// 测试除法
test('divide 2 / 2 to equal 1', () => {
    expect(divide(2, 2)).toBe(1);
});

这里说明一下

test是我们的Jest 的测试函数,表明我们要测试了,接收两个参数,一个是desc(说明描述),一个是fn(回调函数)

expect是断言,意思就是,我们认为,觉得。它接收一个fn为参数

toBe是我们的匹配器,表明类似于===号的作用,带类型匹配的相等,他会拿着你的函数的结果去和toBe参数比较呢,其他的会一一解释好多的匹配器呢,请先这样看着一下

最后我们在package.json文件中,编写脚本

  "scripts": {
    "test": "jest",
    "testw": "jest --watchAll"
  },

test是表明,我们进行测试

testw 是表明我们要实时监视所有的测试文件,自动运行测试,并给出结果

                                                

结果

运行脚本

npm run test

呐,并没有错误呢

错误

假如我们写一个错误呢?

这里的最后一个divide函数,我们传递的参数是2/2,tobe也就是说,我们期望结果是3,但是函数的返回值会是2/2=1,与3不匹配,所以会报错的

// 测试除法
test('divide 2 / 2 to equal 1', () => {
    expect(divide(2, 2)).toBe(3);
});

呐,你看,遇到红的了吧,不用急,我们只要一步一步分析,红的再多我也不怕

他的意思是,我们测试了你的最后一个,错误了,期望值是3,但是收到的测试的值却是1,所以不对

我们只需要改回来即可

                                                 

最后

Jest,其实来说,并不困难的,我会天天更新,一起学习吧,加油

如何使用Jest进行单元测试 在函数体中,我们使用 `expect` 和 `toBe` 函数来断言 `sum(1, 2)` 的返回值是否等于 `3`。- `expect(value).toEqual(expected)`:验证 `value` 是否等于 `expected`,使用深度比较。- `expect(value).not.toBe(expected)`:验证 `value` 是否不等于 `expected`。- `expect(value).toBe(expected)`:验证 `value` 是否等于 `expected`。 阅读详情

相关推荐

掌握Jest模拟与异步测试的艺术

本文深入探讨了如何使用Jest进行模块依赖模拟和异步代码测试。首先介绍了如何模拟模块依赖,通过创建模拟文件和使用`jest.spyOn`来覆盖特定函数的实现。然后,文章详细说明了异步代码测试的必要性及其注意事项,并通过示例展示了如何使用`async/await`语法和`flush-promises`库来等待异步操作完成,确保测试的准确性。

weixin_42230607的博客 358

前端单元测试之Jest

概述 关于前端单元测试的好处自不必说,基础的介绍和知识可以参考之前的博客链接:React Native单元测试。在软件的测试领域,测试主要分为:单元测试、集成测试和功能测试。 单元测试:在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函...

weixin_34381666的博客 1029

B-Tree数据存储

SQLITE数据存储1. B-Tree的优势  在SQLite中数据库、表、索引都是通过B-Tree和B+Tree的形式进行存储的。如果采用传统的二叉树查找树、红黑树的查找深度一般为log2(N) \log{_2}(N)(其中N表示的是整个树的关键字的数目),在数据库中如果存储的资源过多,就会导致查找一个数据过程中出现较多的磁盘I/O操作,而过多的磁盘操作就会导致整个查找的效率较低,而基于二叉树的一

Promiscuous_youth的博客 1141

Jest单元测试Vue项目实践

jest.spyOn()方法同样创建一个mock函数,但是该mock函数不仅能够捕获函数的调用情况,还可以正常的执行被spy的函数。实际上,jest.spyOn()是jest.fn()的语法糖,它创建了一个被spy的函数具有相同内部代码的mock函数。它模拟了一部分类似 jQuery 的 API,非常直观并且易于使用和学习,提供了一些接口和几个方法来减少测试的样板代码,方便判断、操纵和遍历 Vue Component 的输出,并且减少了测试代码和实现代码之间的耦合。即toBe是===,toEqual是==

weixin_55575494的博客 1745

Cadence公司的数字IC设计工具:综合工具(Genus)——(2)

介绍Cadence公司的数字IC设计工具Genus

qq_42922513的博客 1943

STM32F405实战:手把手教你实现永磁同步电机无感FOC控制(附完整工程文件)

本文详细介绍了基于STM32F405微控制器实现永磁同步电机无感FOC控制的完整实战方案。文章从硬件搭建、CubeMX配置入手,逐步讲解了FOC核心算法、SVPWM调制,并重点阐述了如何结合HFI高频方波注入与滑模观测器(SMO)实现全速域无感控制。内容涵盖算法原理、代码实现、参数整定及调试技巧,并附有完整工程文件,为开发者提供从理论到实践的全面指导。

sun99的博客 265

深入浅出 Jest 框架的实现原理

English Version | 中文版 深入浅出 Jest 框架的实现原理 https://github.com/Wscats/jest-tutorial 什么是 Jest Jest 是 Facebook 开发的 Javascript 测试框架,用于创建、运行和编写测试的 JavaScript 库。 Jest 作为 NPM 包发布,可以安装并运行在任何 JavaScript 项目中。Jest 是目前前端最流行的测试库之一。 测试意味着什么 在技 ​​ 术术语中,测试意味着检查我们的代码是否满足某些期望。

Wscats 1392

100天精通Python(可视化篇)——第89天:Bokeh库绘图可视化基础入门(参数说明+案例实战)

专栏导读 一、Bokeh是什么? 二、安装与导入 三、Bokeh接口介绍 四、创建图表 五、添加自定义渲染器 切换主题 添加图例 图例位置 图例方向 图例背景和边界 图例文本的外观 行列布局 网格布局

努力让自己发光,对的人才能迎着光而来 1万+

前端单元测试:Jest从入门到精通

在当今快节奏的前端开发中,单元测试毫无疑问是保障代码质量的重要防线。作为 Facebook 开源的测试框架,Jest 以其零配置、强大功能和开发者友好性,成为前端测试的首选工具。本文将带你掌握 Jest 单元测试的核心技能,一起写更优秀的代码吧!

qq_52623552的博客 2520

鲁棒优化 (Robust Optimization) 算法详解及案例分析

鲁棒优化是一种用于处理不确定性优化问题的方法。其目标是在不确定性参数的可能取值范围内,找到一个对不确定性具有鲁棒性的解。

闲人编程的博客 4327

ADS基础教程16 - 存档和导入(workspace、cell、view)

选择workspace_Archive目录作为保存workspace归档的目录,点击打开进行目录选择,点击Finish保存目录。,选择cell_Archive目录作为保存cell归档的目录,点击打开进行目录选择,点击Finish保存目录。,选择view_Archive目录作为保存view归档的目录,点击打开进行目录选择,点击Finish保存目录。(2)在弹框中,可以选择点击Select将参考的条目添加进来,然后点击Next…(2)在弹框中,可以选择点击Select将参考的条目添加进来,然后点击Next…

XZ_ZC的博客 3700

Jest进阶知识:模拟计时器 - 掌握 setInterval 和 setTimeout 的测试技巧

本文详细介绍了如何在 Jest 中模拟计时器(setInterval 和 setTimeout),确保计时器相关的代码在测试中能够高效、准确地运行。通过多个实际示例,展示了如何使用 jest.spyOn 方法监控和控制方法的调用,以及如何使用 jest.useFakeTimers 和 jest.advanceTimersByTime 方法模拟时间的流逝。文章还总结了在测试计时器代码时的最佳实践,帮助开发者确保代码的可靠性和健壮性。

weixin_53961451的博客 605

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

在jest中使用ESmodule模块化导入导出

Jest 默认安装之后是遵循 nodejs 的 commonjs 模块调用的,如果要使用 import 导入的话需要配置 babel ,配置方法: 安装 bebal yarn add --dev babel-jest @babel/core @babel/preset-env 配置 babel // babel.config.js module.exports = { presets: [ [ ‘@babel/preset-env’, { targets: { node: ‘current’, },

weixin_44018654的博客 836

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Jest单元测试

Jest是一个由Facebook开发的JavaScript测试框架,它旨在使编写单元测试变得简单、有趣,并且能够提供快速的反馈。Jest被设计为易于上手,具有强大的功能,包括内置的异步测试支持、快照测试、模拟HTTP请求等。

公众号【伤心的辣条】资料领取~ 1015

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Jest单元测试:玩转代码的小捉迷藏!

Jest 是一个流行的 JavaScript 测试框架,专注于简化和改进代码的测试流程。它由 Facebook 开发并维护,具有以下特点:

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 242

前端自动化测试 —— Jest 测试框架应用

大家好,我是若川。我持续组织了近一年的源码共读活动,感兴趣的可以点此扫码加我微信lxchuan12参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北|河南籍前端群,可加我微信进群。欢迎星标我的公众号~不错过推文~前端自动化测试——Jest测试框架应用http://zoo....

u012384510的博客 652

入门前端自动化测试-jest-基础

jest基础 jest官网 匹配器 命令行工具 测试异步 钩子函数 mock 快照 dom 匹配器 jest默认环境是node 如果想在jest环境使用esmodule,需要借助@babel/core转化工具, @babel/preset-env指明如何转化 { "presets": [ [ "@babel/preset-env", { "targets": {

lin_fightin的博客 5721

Jest使用

Jest 是 Facebook 出品的一个 JavaScript 开源测试框架。相对其他测试框架,其一大特点就是就是内置了常用的测试工具,比如零配置、自带断言、测试覆盖率工具等功能,实现了开箱即用。Jest 适用但不局限于使用以下技术的项目:Babel,、TypeScript、 Node、 React、Angular、Vue 等。Jest 主要特点:● 零配置● 自带断言。

woyebuzhidao321的博客 2374

Jest 测试框架快速上手

Jest 是一个用于 JavaScript 应用程序的一种测试框架,是由 Facebook 开发并开源的,它为开发人员提供了一种简单而高效的方式来编写和运行各种类型的测试。 测试在我们技术中,意味着检查我们编写的代码是否满足某些期望,它是一种系统性的方法,用于发现和识别潜在的问题、错误或缺陷。

forever__fish的博客 2730

如何使用Jest测试你的React组件

Jest首次发布于2014年,尽管它最初引起了很多关注,但该项目一度停滞不前,并没有得到很积极的开发。然而,Facebook投入了大量精力来改进Jest,并发布了一些令人印象深刻的变化,值得重新考虑。与最初的开源发布相比,Jest仅保留了名称和标志。其他一切都已经改变和重写。如果您想了解更多信息,可以阅读Christoph Pojer的评论,他在其中讨论了该项目的当前状态。如果您对使用其他框架设置Babel、React和JSX测试感到沮丧,那么我强烈建议您尝试Jest。

okcross0的博客 924

前端自动化测试jest

持续集成和前端自动化测试 ​ 持续集成是互联网软件开发上线流程中的核心一环,自动化测试是持续集成得以实现的核心步骤,缺乏了自动化测试,持续集成自然无从谈起。 ​ 在日常的开发中,前端错综复杂的变化引发的 bug 往往令开发者头疼,或多或少经历过 修完东墙西墙倒 的经历,此时前端自动化测试就显得非常重要。 ​ 前端的自动化测试无非也是编写测试用例,在持续集成时执行跑通全部测试用例。如果是一个短平快的小项目,引入前端自动化测试,编写测试用例,无疑只会增加开发成本,然而当项目扩大、迭代频繁、逻辑复杂、需求反

萌萌哒的瑞萌萌的博客 2268

Jest 测试框架入门指南

Jest 是一个功能强大的 JavaScript 测试框架,由 Facebook 开发并维护。它以"零配置"为设计理念,提供了开箱即用的测试解决方案,特别适合 React 和前端项目的测试,但也完全支持 Node.js 后端项目的测试。 ## 安装 Jest 要开始使用 Jest,首先需要在项目中安装它。推荐作为开发依赖安装: ```bash npm install --save-dev j...

gitblog_00575的博客 478

如何使用 Jest 和 TypeScript 进行单元测试

Jest 提供了强大的 Mock 功能和丰富的测试工具,能有效提升开发效率。希望本文的指南和示例能帮助你更好地掌握 Jest 和 TypeScript 的测试方法!通过结合 TypeScript 和 Jest,你可以实现类型安全、高质量的。测试文件以 .test.ts 或 .spec.ts 结尾。等不易直接测试的部分,使用 Jest Mock 减少测试依赖。以下以一个简单的函数为例,展示如何编写和测试代码。tests:测试文件夹(可选,适用于大型项目)。与被测试文件放在同一目录下或单独维护测试目录。

OKCRoss的博客 1985
上一篇: 谁说Props只能父传子?
下一篇: Jest 测试异步函数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值