TECHTOGOU

Javascript 单元测试 - DOM 操作

coder 2024-05-16 原文

我对 Javacript 单元测试还很陌生。一件事一直困扰着我。在测试 javascript 时,我们经常需要进行 DOM 操作。看起来我正在对 Controller /组件中的方法/函数进行单元测试,但我仍然需要依赖模板中的 HTML 元素。一旦更改了 id(或在我的测试用例中用作选择器的属性),我的测试用例也需要更改!这不会违反单元测试的目的吗?

最佳答案

javascript 单元测试中最困难的部分之一不是测试,而是学习如何构建代码以使其可测试。

您需要通过明确分离可测试逻辑和 DOM 操作来构建代码。

我的经验法则是:

如果您正在测试任何依赖于 DOM 结构的东西,那么您就错了。

总结:尽量只测试数据操作和逻辑操作。

关于Javascript 单元测试 - DOM 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18852450/

有关Javascript 单元测试 - DOM 操作的更多相关文章

  1. javascript - Grunt Watch 反复显示 "Warning: must provide pattern" - 2

    我在配置Grunt以查看我的项目文件、重建和更新连接服务器中托管的页面时遇到问题。如果我运行任何构建任务,然后将'watch'作为组合任务的一部分,那么'watch'似乎陷入循环,无休止地打印消息.Running"watch"taskWaiting...Warning:mustprovidepattern如果我只是运行$gruntwatch,它会很高兴地观察我的源文件并根据需要进行编译/构建。我认为相关的任务配置是这些:watch:{html:{files:['<%=site.partials%>','<%=site.layou

  2. javascript - 带/不带选择器参数的 jquery 和 jquery 委托(delegate)有什么区别? - 2

    我正在使用jquery1.10。我想知道这三个函数之间有什么区别。哪个功能更好,为什么?委托(delegate)函数的作用是什么?$(".dropdown-menu").on("click",".show_opt_menu",function(){alert("hello");});$(".dropdown-menu.show_opt_menu").on("click",function(){alert("hello");});$(".dropdown-menu

  3. Javascript 在函数调用中跳过参数 - 2

    这里是JavaScript初学者。假设我有一个带有3个参数的javascript函数:functionf(arg1,arg2,arg3){//dostuff}我知道我可以调用f(value1,value2);在这种情况下,函数范围内的arg1将为value1,arg2将为value2,而arg3将为null。一切正常。但是,如果我想调用仅向arg1和arg3赋值的函数,我需要执行如下操作:f(value1,null,value2);有没有一种方法可以以更像C#的方式指定哪些参数具有哪些值(无需将未给定参数指定为null)?类似这样的事情:为了仅使用arg1和arg3的值调用f,我会写f

  4. javascript - 如何在 Sequelize.js 中定义对象数组? - 2

    如何在Sequelize.js模型中定义对象数组字段?我需要这样的东西{"profiles":[{"profile_id":10,"profile_pictures":["pic1.jpg","pic2.jpg","pic3.jpg"],"profile_used_id":12},...//moreprofiles]}我检查了docs,但找不到相关的数据类型,我在这里遗漏了什么吗? 最佳答案 我已经成功地通过定义我的模型来

  5. javascript - 如何使用 javascript 将时间戳字符串转换为本地时间? - 2

    我有一个JSP页面,我在其中提取存储在数据库中的时间戳作为字符串,格式为ThuAug21201422:09:23GMT+0530(IndiaStandardTime).当然,我可以按原样在页面中显示它,但是我一直在寻找一种javascript解决方案,它可以让我根据用户的本地时区转换此时间戳。有办法吗?或者对于这样的时间戳是不可能的?非常感谢任何帮助,我的问题可能听起来很愚蠢,因为我仍在熟悉javascript。谢谢 最佳答案 我自己想通了,我能够完成我需要的。将timestamp从数据库传递给varnewDate(timestam

  6. javascript - 为什么 JavaScript 认为 354224848179262000000 和 354224848179261915075 相等? - 2

    这个问题在这里已经有了答案:WhatisJavaScript'shighestintegervaluethatanumbercangotowithoutlosingprecision?(21个答案)关闭8年前。因此,我开始尝试使用递归函数找到第100个斐波那契数,并使用以下代码内存该函数。Function.prototype.memoize=function(){varoriginalFunction=this,slice=Array.prototype.slice;cache={};returnfunction(){varkey=slice.call(arguments);i

  7. javascript - NVD3 - 如何刷新数据功能以在点击时生成新数据 - 2

    我有一个折线图,每次页面刷新时它都会更改数据,这很好,但我需要通过用户点击来刷新。这是因为页面上最终会有其他输入字段,刷新页面会破坏他们当前的session。jsfiddle-http://jsfiddle.net/darcyvoutt/dXtv2/这是创建该行的代码设置:functioneconomyData(){//RoundsvarnumRounds=10;//Stabilityofeconomyvarstable=0.2;varunstable=0.6;varstability=unstable;//Typeofeconomyvarboom=0.02;varflat=0;var

  8. javascript - AngularJs 指令 : call method from parent scope within template - 2

    我对Angular指令还很陌生,我很难让它做我想做的事。这是我所拥有的基础知识:Controller:controller('profileCtrl',function($scope){$scope.editing={'section1':false,'section2':false}$scope.updateProfile=function(){};$scope.cancelProfile=function(){};});指令:directive('editButton',function(){return{restri

  9. javascript - Firefox 扩展自定义字体 - 2

    我正在使用FirefoxAdd-onSDK创建扩展并执行PageMod。此代码位于main.js中。...exports.main=function(){varpageMod=require("sdk/page-mod");pageMod.PageMod({include:"*",contentScriptWhen:'end',contentStyleFile:[self.data.url("css/style.css"),self.data.url("css/font-awesome.css")],con

  10. javascript - JSON.stringify 是否保留数组中对象的顺序 - 2

    我正在创建一个javascript对象,如下所示varmyObjects;for(vari=0;i<10;i++){vareachObject={"id":i};myObjects.push(eachObject);}message={"employeeDetails":myObjects}之后我将它们按如下方式进行字符串化JSON.stringify(message);上述方法是否按照对象之前的顺序对对象进行了字符串化?在stringify之后,它们会像以前一样按0,1,2....9的顺序排列吗? 最佳答案

随机推荐

  1. javascript - Grunt Watch 反复显示 "Warning: must provide pattern" - 2

    我在配置Grunt以查看我的项目文件、重建和更新连接服务器中托管的页面时遇到问题。如果我运行任何构建任务,然后将'watch'作为组合任务的一部分,那么'watch'似乎陷入循环,无休止地打印消息.Running"watch"taskWaiting...Warning:mustprovidepattern如果我只是运行$gruntwatch,它会很高兴地观察我的源文件并根据需要进行编译/构建。我认为相关的任务配置是这些:watch:{html:{files:['<%=site.partials%>','<%=site.layou

  2. javascript - 带/不带选择器参数的 jquery 和 jquery 委托(delegate)有什么区别? - 2

    我正在使用jquery1.10。我想知道这三个函数之间有什么区别。哪个功能更好,为什么?委托(delegate)函数的作用是什么?$(".dropdown-menu").on("click",".show_opt_menu",function(){alert("hello");});$(".dropdown-menu.show_opt_menu").on("click",function(){alert("hello");});$(".dropdown-menu

  3. Javascript 在函数调用中跳过参数 - 2

    这里是JavaScript初学者。假设我有一个带有3个参数的javascript函数:functionf(arg1,arg2,arg3){//dostuff}我知道我可以调用f(value1,value2);在这种情况下,函数范围内的arg1将为value1,arg2将为value2,而arg3将为null。一切正常。但是,如果我想调用仅向arg1和arg3赋值的函数,我需要执行如下操作:f(value1,null,value2);有没有一种方法可以以更像C#的方式指定哪些参数具有哪些值(无需将未给定参数指定为null)?类似这样的事情:为了仅使用arg1和arg3的值调用f,我会写f

  4. javascript - 如何在 Sequelize.js 中定义对象数组? - 2

    如何在Sequelize.js模型中定义对象数组字段?我需要这样的东西{"profiles":[{"profile_id":10,"profile_pictures":["pic1.jpg","pic2.jpg","pic3.jpg"],"profile_used_id":12},...//moreprofiles]}我检查了docs,但找不到相关的数据类型,我在这里遗漏了什么吗? 最佳答案 我已经成功地通过定义我的模型来

  5. javascript - 如何使用 javascript 将时间戳字符串转换为本地时间? - 2

    我有一个JSP页面,我在其中提取存储在数据库中的时间戳作为字符串,格式为ThuAug21201422:09:23GMT+0530(IndiaStandardTime).当然,我可以按原样在页面中显示它,但是我一直在寻找一种javascript解决方案,它可以让我根据用户的本地时区转换此时间戳。有办法吗?或者对于这样的时间戳是不可能的?非常感谢任何帮助,我的问题可能听起来很愚蠢,因为我仍在熟悉javascript。谢谢 最佳答案 我自己想通了,我能够完成我需要的。将timestamp从数据库传递给varnewDate(timestam

  6. javascript - 为什么 JavaScript 认为 354224848179262000000 和 354224848179261915075 相等? - 2

    这个问题在这里已经有了答案:WhatisJavaScript'shighestintegervaluethatanumbercangotowithoutlosingprecision?(21个答案)关闭8年前。因此,我开始尝试使用递归函数找到第100个斐波那契数,并使用以下代码内存该函数。Function.prototype.memoize=function(){varoriginalFunction=this,slice=Array.prototype.slice;cache={};returnfunction(){varkey=slice.call(arguments);i

  7. javascript - NVD3 - 如何刷新数据功能以在点击时生成新数据 - 2

    我有一个折线图,每次页面刷新时它都会更改数据,这很好,但我需要通过用户点击来刷新。这是因为页面上最终会有其他输入字段,刷新页面会破坏他们当前的session。jsfiddle-http://jsfiddle.net/darcyvoutt/dXtv2/这是创建该行的代码设置:functioneconomyData(){//RoundsvarnumRounds=10;//Stabilityofeconomyvarstable=0.2;varunstable=0.6;varstability=unstable;//Typeofeconomyvarboom=0.02;varflat=0;var

  8. javascript - AngularJs 指令 : call method from parent scope within template - 2

    我对Angular指令还很陌生,我很难让它做我想做的事。这是我所拥有的基础知识:Controller:controller('profileCtrl',function($scope){$scope.editing={'section1':false,'section2':false}$scope.updateProfile=function(){};$scope.cancelProfile=function(){};});指令:directive('editButton',function(){return{restri

  9. javascript - Firefox 扩展自定义字体 - 2

    我正在使用FirefoxAdd-onSDK创建扩展并执行PageMod。此代码位于main.js中。...exports.main=function(){varpageMod=require("sdk/page-mod");pageMod.PageMod({include:"*",contentScriptWhen:'end',contentStyleFile:[self.data.url("css/style.css"),self.data.url("css/font-awesome.css")],con

  10. javascript - JSON.stringify 是否保留数组中对象的顺序 - 2

    我正在创建一个javascript对象,如下所示varmyObjects;for(vari=0;i<10;i++){vareachObject={"id":i};myObjects.push(eachObject);}message={"employeeDetails":myObjects}之后我将它们按如下方式进行字符串化JSON.stringify(message);上述方法是否按照对象之前的顺序对对象进行了字符串化?在stringify之后,它们会像以前一样按0,1,2....9的顺序排列吗? 最佳答案