- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Jasmine 对 AngularJS 指令进行单元测试。该指令旨在使用 D3js 在 postLink 阶段将 SVG 元素添加到模板中。这在实际应用中效果很好。
在单元测试中,D3 代码似乎从未执行。
这是代码的简化版本,仍然会重现错误:
angular.module('app', []);
angular.module('app').directive('d3Test', function () {
return {
template: '<div id="map"></div>',
restrict:'E',
scope: {
someAttr: '@',
},
link: function postLink(scope, element, attrs) {
d3.select('#map').append('svg');
}
};
});
这是单元测试:
describe('directive test', function () {
var element, scope;
beforeEach(module('app'));
beforeEach(inject(function ($rootScope, $compile) {
scope = $rootScope.$new();
element = '<d3-test></d3-test>';
element = $compile(element)(scope);
scope.$apply();
}));
it('should have an SVG child element', function () {
expect(element.html()).toEqual('<div id="map"><svg></svg></div>');
});
});
我收到的错误是:
PhantomJS 1.9.8 (Mac OS X) directive test should have an SVG child element FAILED
Expected '<div id="map"></div>' to equal '<div id="map"><svg></svg></div>'.
我对如何测试 D3 所做的 DOM 更改的期望是否错误?我怎样才能最好地测试这个?
最佳答案
问题很简单。d3.select
方法正在 window.document
中搜索元素。在您的测试用例中,您的元素位于独立的dom元素中,而不是window.document
的一部分。
要解决此问题,您可以直接通过指令的元素获取节点,而不是使用全局选择器。
d3.select(element.find('div#map')[0]).append('svg');
注意:此代码适用于 Angular+jQuery。如果您不在项目中使用 jQuery,您可能需要调整选择器,因为这样您就只能按标签名称进行查找。 https://docs.angularjs.org/api/ng/function/angular.element
关于angularjs - 单元测试 AngularJS 指令,postLink D3 不更改 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417206/
我找不到 $postLink() 的任何示例来自 AngularJS components , 部分 组件具有明确定义的生命周期 .您能否提供一个简单的示例,说明 Controller 中实现的方法,
根据AngularJS的文档,定义指令时,compile中有一个postLink,link', templateUrl: 'directive.html', replace: fals
使用已融入 CRUD 的代码,我有以下用于删除项目的代码: Form->postLink(__('Delete'), array('controller'=>'attachments', 'actio
我正在使用 cakephp 2。 是否可以使用表单助手 postLink 函数来更新记录?基本上我想要一个“批准”按钮,将记录的“批准”字段更改为 1。 我能找到的一切都只与执行删除功能有关?文档也没
我想在如下表单中创建一个 Cakephp 删除帖子链接。但是当我在浏览器中检查并且无法删除时,第一个删除帖子按钮不包括删除表单,但其他按钮包括我想要的并且可以删除。 是 cakephp 错误还是我需要
我创建了简单的指令: angular.module('app').directive('field', function () { return { restrict: 'E'
我正在尝试学习 angular 1.5 组件,但遇到了一个问题。以下代码是我的组件的启动布局,使用我的 gruntjob 编译时没有错误。 angular.module('layout',[]).co
当我尝试在后链接帮助程序中将转义设置为 false 时,JavaScript 警报似乎在 Chrome 中中断,不知道为什么,因为我没有收到任何控制台错误,它只是在没有初始警报的情况下触发操作。 ec
我想使用 cakePHP 的 formHelper::postLink 函数输出一个带有超链接的图像,而不仅仅是一个文本超链接。 有人知道怎么做吗?我尝试了多种方法,但无法正常工作。 Form->po
我正在尝试为 JustGauge 创建指令在 AngularJS 中。我的 html View 是这样的: 我的指令是: angular.
将这个 repo 用于 Angular 样板 https://github.com/AngularClass/NG6-starter 但我发现很难访问 Angular component 的 $pos
我目前正在从 Angular.JS (1.5) 升级到 Angular 2+。我在 IComponentController 中遇到了 $postLink 方法,我试图弄清楚 Angular 2+ 中
更新:我悬赏这个问题。我不是在寻找黑客或解决方法。我正在寻找一种官方方式来访问 Angular 组件中的 dom,并解释为什么我看到的行为($postLink 运行到早期)似乎与官方文档相矛盾。 官方
有没有人找到一种方法来拦截默认的 Form::postLink() 表单与 Jquery? 我希望表单在没有 JS 的情况下工作(因此是 postLink)。 但是启用 JS 后,我想拦截帖子并通过
鉴于以下情况: var Panda; (function (Panda) { "use strict"; var BulkCaptureComponentController = (f
鉴于以下情况: var Panda; (function (Panda) { "use strict"; var BulkCaptureComponentController = (f
这是我的帖子链接标签: Form -> postLink(__('Update'), array( 'controller'=>'us
我正在尝试使用 Jasmine 对 AngularJS 指令进行单元测试。该指令旨在使用 D3js 在 postLink 阶段将 SVG 元素添加到模板中。这在实际应用中效果很好。 在单元测试中,D3
这给了我想要的: Html->link( $this->Html->tag('i', '', array('class' => 'glyphicon glyphicon-edit')) . "
我是一名优秀的程序员,十分优秀!