Javascript Angular.js单元测试指令

Javascript Angular.js单元测试指令,javascript,angularjs,unit-testing,Javascript,Angularjs,Unit Testing,我想做一个角度指令的单元测试。这就是代码: describe('Test', function () { var element, scope; // load the service's module beforeEach(module('app')); beforeEach(inject(function ($compile, $rootScope) { scope = $rootScope.$new(); element = angula

我想做一个角度指令的单元测试。这就是代码:

describe('Test', function () {

  var element,
      scope;

  // load the service's module
  beforeEach(module('app'));


  beforeEach(inject(function ($compile, $rootScope) {
    scope = $rootScope.$new();
    element = angular.element('<div id="wow"></div>');
    $compile(element)(scope);
    element.scope().$apply();
  }));

  it('should', function () {
    console.log(document.getElementById('wow'));
  });

});
描述('Test',函数(){
var元素,
范围
//加载服务的模块
在每个(模块(“应用”)之前;
beforeach(注入函数($compile,$rootScope){
scope=$rootScope.$new();
元素=角度。元素(“”);
$compile(元素)(范围);
element.scope().$apply();
}));
它('should',function(){
log(document.getElementById('wow');
});
});
我在控制台中得到了
null

当然,这只是一个测试用例。在实际代码中,getElementById由插件使用,该插件用我的指令包装,我正在尝试测试该指令

所以我的问题是:
getElementById
为什么找不到刚刚编译的DOM元素。如果这是正确的行为,我怎样才能避免这个错误


谢谢

您需要将元素附加到文档中的某个位置。这是工作

我唯一要补充的是:


angular.element(document.body).append(element)

您需要将元素附加到文档中的某个位置。这是工作

我唯一要补充的是:


angular.element(document.body).append(element)

您需要将元素附加到文档中的某个位置。这是工作

我唯一要补充的是:


angular.element(document.body).append(element)

您需要将元素附加到文档中的某个位置。这是工作

我唯一要补充的是:


angular.element(document.body).append(element)

找不到DOM元素,因为jasmine从未将其实际附加到DOM。如果要获取元素,只需将其称为元素。例如:

it('should', function() {
  expect(element.attr('id')).toBe('wow');
});

您可以手动将元素附加到DOM,但请记住在完成测试时将其删除(为此,我使用
afterEach
块)。Jasmine在整个测试套件中使用相同的DOM,因此如果您忘记删除某个元素,您可能会在测试中从DOM中的元素中得到误报或其他意外结果,而这些元素是您不希望出现的。一般来说,除非您正在测试某些交互,否则不必将元素附加到DOM(例如,blur可以在不附加到DOM的情况下工作,但focus不能)。

找不到DOM元素,因为jasmine从未将其实际附加到DOM。如果要获取元素,只需将其称为元素。例如:

it('should', function() {
  expect(element.attr('id')).toBe('wow');
});

您可以手动将元素附加到DOM,但请记住在完成测试时将其删除(为此,我使用
afterEach
块)。Jasmine在整个测试套件中使用相同的DOM,因此如果您忘记删除某个元素,您可能会在测试中从DOM中的元素中得到误报或其他意外结果,而这些元素是您不希望出现的。一般来说,除非您正在测试某些交互,否则不必将元素附加到DOM(例如,blur可以在不附加到DOM的情况下工作,但focus不能)。

找不到DOM元素,因为jasmine从未将其实际附加到DOM。如果要获取元素,只需将其称为元素。例如:

it('should', function() {
  expect(element.attr('id')).toBe('wow');
});

您可以手动将元素附加到DOM,但请记住在完成测试时将其删除(为此,我使用
afterEach
块)。Jasmine在整个测试套件中使用相同的DOM,因此如果您忘记删除某个元素,您可能会在测试中从DOM中的元素中得到误报或其他意外结果,而这些元素是您不希望出现的。一般来说,除非您正在测试某些交互,否则不必将元素附加到DOM(例如,blur可以在不附加到DOM的情况下工作,但focus不能)。

找不到DOM元素,因为jasmine从未将其实际附加到DOM。如果要获取元素,只需将其称为元素。例如:

it('should', function() {
  expect(element.attr('id')).toBe('wow');
});

您可以手动将元素附加到DOM,但请记住在完成测试时将其删除(为此,我使用
afterEach
块)。Jasmine在整个测试套件中使用相同的DOM,因此如果您忘记删除某个元素,您可能会在测试中从DOM中的元素中得到误报或其他意外结果,而这些元素是您不希望出现的。通常,除非您正在测试某些交互,否则不必将元素附加到DOM(例如,blur可以在不附加到DOM的情况下工作,但focus不能)。

元素是否附加到文档中?我想您需要自己做,但如果我不手动附加元素,元素放在哪里?元素是否附加到文档中?我想您需要自己做,但如果我不手动附加元素,元素放在哪里?元素是否附加到文档中?我想您需要自己做,但如果我不手动附加元素,元素放在哪里?元素是否附加到文档中?我想你需要自己做,但是如果我不手动附加元素,元素放在哪里呢?这是一个更合适的答案。如果您必须将某个东西附加到DOM,那么在E2E测试而不是单元测试中执行。这是一个更合适的答案。如果您必须将某个东西附加到DOM,那么在E2E测试而不是单元测试中执行。这是一个更合适的答案。如果您必须将某个东西附加到DOM,那么在E2E测试而不是单元测试中执行。这是一个更合适的答案。如果必须将某个内容附加到DOM,那么在E2E测试中执行,而不是在单元测试中执行。