当前位置: 首页 > 面试题库 >

在单元测试中访问已编译的模板

林和畅
2023-03-14
问题内容

大部分Angular教程都讨论了通过Protractor使用端到端测试来测试编译后的模板是否按预期出炉。我想知道是否可以通过单元测试来做到这一点。

大多数讨论在单元测试中引用HTML代码的教程都描述了在测试中编译自己的书面代码,例如,以确保正确访问指令:

describe('some function', function () {
  it('should do something', inject(function ($compile, $rootScope) {
    var element = $compile('<div id = "foo" ng-hide = "somecondition">Bar</div>')($Scope);
    $rootScope.digest();
    //Search for a given DOM element and perform some test here
  }));
});

但是,假设我要测试实际模板文件中的代码。就像我想测试ng-hide是否成功设置一样。我希望能够执行以下操作:

describe('some function', function () {
  it('should do something', function () {
    //Get the div with ID 'foo' in the compiled template
    var elm = $('#foo');
    expect(elm.css('display')).toEqual('none');
  });
});

我这样做时不起作用。elm被设置为一些HTML /
Javascript代码,而不是模板的代码,并elm.css('display')以未定义的形式返回。

是否可以通过Jasmine / Angular设置对它进行单元测试?


问题答案:

$templateCache使用ng-html2js将您的HTML模板加载到Angular中,以便在您的测试中可用。

在测试中检索特定的模板:

var template = $templateCache.get('my/template.html');

将模板包装在一个更易于使用的jqLit​​e / jQuery对象中:

var element = angular.element(template);

然后,您可以在模板中选择元素:

var fooEl = element.find('#foo');

对于断言,您不想测试display: none设置在元素上的东西,而是在测试的内部实现ng- hide。您可以相信Angular团队有自己的测试,涵盖了设置CSS属性的工作。相反,您要测试您是否正确编写了模板,因此它更适合测试ng- hide元素上属性的存在,并且提供了要绑定到的正确的scope属性:

expect(fooEl.attr('ng-hide')).toBe('isFooElHidden');


 类似资料:
  • 我面临一个问题,而嘲笑jUnit测试的东西。 情况如下: 类A实现了来自第三方jar的接口,并且需要实现method1。除了method1之外,A还包含method2,它是从method1调用的。method2本身调用一些外部服务。 我想单元测试方法1。 方法1接受输入,比如X。X有一个包裹在里面的输入变量,比如var1。var1由方法1中的逻辑使用,方法1在X中设置另一个变量,比如var2。 所

  • 我一直试图在使用 Pax 考试创建的 OSGI 容器中运行 JMH 基准测试(类似于此 SO 答案中描述的方式,但也将 Pax 考试放入其中)。但是,在加载编译期间创建的 JMH 生成的资源文件时遇到了一些问题。 编译完测试后,可以在< code>target/test-classes目录中找到以下内容: 在测试中,我使用了一些代码(我无法更改),这些代码(有效地)查找文件,如下所示: 运行失败(

  • 我在尝试包装我的代码以用于单元测试时遇到了一些问题。问题是。我有接口IHttpHandler: 现在很明显,我将在Connection类中有一些方法,这些方法将从my后端检索数据(JSON)。但是,我想为这个类编写单元测试,显然我不想编写针对真实后端的测试,而是一个被嘲弄的测试。我曾尝试谷歌一个很好的答案,但没有很大的成功。我以前可以并且曾经使用过Moq来模拟,但是从来没有在像HttpClient

  • 问题内容: 我正在创建一个Java单元测试来测试一些我最近更改的代码。但是,我正在测试的方法实例化了一个使用ResourceBundle的类…… 资源文件位于Web包中,位于 我的测试保存在我的xml包中 在正常运行时,资源束是可访问的,但在运行单元测试时则不可访问。它引发此错误…… 我该怎么办?我可以启用测试以某种方式查看资源包吗?我可以在某个地方以某种方式看到代码的模拟资源文件吗? 问题答案:

  • 我不会告诉你有关后台任务的单元测试的任何内容,因为Hangfire没有添加任何特定方法 (除了 IJobCancellationToken 接口参数)去改变任务。使用您最喜爱的工具,并照常写入单元测试。本节介绍如何测试创建的后台任务。 所有的代码示例都使用静态 BackgroundJob 类来告诉你如何做这个或那些东西,只是出于简单演示的目的。但是当你想测试调用的静态方法时,会变得很痛苦。 不用担

  • 问题内容: 我正在为启动a 并使用返回的诺言执行一些逻辑的控制器编写单元测试。我可以测试触发$ modal的父控制器,但是我一生无法弄清楚如何模拟成功的诺言。 我尝试了多种方法,包括使用和强制履行承诺。但是,我得到的最接近的结果是与本 SO帖子中的最后一个答案相似的东西。 我已经在“旧的” 模式中看到了几次这样的问题。在“新” 模式下,我找不到太多的方法。 一些指针将不胜感激。 为了说明问题,我使