Unit testing 单元测试调用检查DOM属性的方法的控制器

Unit testing 单元测试调用检查DOM属性的方法的控制器,unit-testing,angularjs,Unit Testing,Angularjs,我正在为一个控制器编写一个单元测试,其中工作流中的某个地方检查DOM的特定属性。目前,我只是通过模拟的方法 spyOn(controller, 'methodChecksDom').return('value that I want'). 工作正常,但如何在不模仿该方法的情况下通过测试。我尝试过使用$document并通过 $document.find('body').append('<div>...</div>') $document.find('body')。ap

我正在为一个控制器编写一个单元测试,其中工作流中的某个地方检查DOM的特定属性。目前,我只是通过模拟的方法

spyOn(controller, 'methodChecksDom').return('value that I want').
工作正常,但如何在不模仿该方法的情况下通过测试。我尝试过使用$document并通过

$document.find('body').append('<div>...</div>')
$document.find('body')。append('…'))
但我在测试中发现以下错误:

错误:肮脏的测试!在文档正文中找到DOM残留物:。。。 错误(本机)


正确的做法是什么。在不模仿的情况下测试方法。非常感谢

您应该使用自定义指令执行任何DOM操作或添加行为


如果您死心塌地想直接在这里测试DOM,那么需要在测试之后清理插入的元素。这就是为什么会出现错误--您没有清理通过
$document
插入的内容


也就是说,你真的不应该读控制器内部的DOM。

也许不是这样,但根本不建议在控制器中执行DOM操作,测试是问题之一:你是正确的。我没有做任何DOM操作,但你是对的。即使我使用$document服务,这也是一个问题吗?可以肯定地说,由于测试困难,在控制器中使用$document是不明智的吗?我没有做任何dom操作,只是简单地检查元素的属性。e、 g$('#someId').attr('id')如何使该'id'属性可供控制器使用?谢谢Jeff。我没有意识到从控制器读取DOM是一种很糟糕的做法。
angular.module("myApp",[]).directive("mydirective",function(){
  return {
    link: function(scope,iElem,iAttrs) {
       //Do stuff per instance here
    }
  }
})