gpt4 book ai didi

javascript - 在按钮单击事件更改事件 html 后,如何获取单元测试范围内的 html 以进行更新?

转载 作者:行者123 更新时间:2023-11-28 02:46:06 25 4
gpt4 key购买 nike

目前我正在测试的表格有以下 html:

<table id="admin-self-assessment-table" class="table">
<tr class="admin-self-assessment-table-headers">
<th class="admin-tile" colspan="2">Question Category</th>
<td class="admin-button">
<button id="add-category-button"
ng-click="selfAssessUpdateCtrl.addCategory()"
class="fa fa-plus-circle"></button>
</td>
</tr>

无论何时单击上述按钮,都会从测试中正确调用 addCategory() 方法,但未正确附加 html。

函数:

    vm.addCategory = function(){
html = (
'<tr class="category-heading admin-self-assessment-question-category">' +
'<td class="category-name" contenteditable="true">Category</td>' +
'<td><button class="button-coloring category-button-add fa fa-plus-circle"></button></td>' +
'<td><button class="button-coloring category-table-delete fa fa-times-circle"></button></td>' +
'</tr>');
$('#admin-self-assessment-table').append(html);
};

它在页面上按预期工作。新行出现在表格中并按预期运行,但单元测试失败,因为 html 实际上并未添加到该范围内。

单元测试:

describe('Self-Assessment Controller', function () {
var scope, $state, ctrl, html, httpBackend, safeService;

beforeEach(module('generic'));
beforeEach(module('generic.reports'));

beforeEach(inject(function (_$rootScope_, $templateCache, $controller, $compile, _$state_, _$httpBackend_) {
scope = _$rootScope_.$new();
$state = _$state_;
httpBackend = _$httpBackend_;

ctrl = $controller('selfAssessUpdateCtrl', {
$scope: scope,
org: testOrganization,
$element: html,
safeService: safeService
});
scope.selfAssessUpdateCtrl = ctrl;

html = $templateCache.get('app/components/admin/selfAssessmentUpdate/selfAssessmentUpdate.html');
html = $compile(angular.element(html))(scope);

scope.$digest();
}));

it('should add a new category when appropriate button is clicked', function(){
var table = html.find('#admin-self-assessment-table').find('tr');
html.find('#add-category-button').click();
scope.$apply();
expect(table.length).toEqual(2);
});
});

期望失败,“Expected 1 to equal 2”

当我 console.log 表变量(应该包含表的所有 trs)时,我得到:

LOG:{0: <tr class="admin-self-assessment-table-headers">
<th class="admin-tile" colspan="2">Question Category</th>
<td class="admin-button">
<button id="add-category-button" ng-click="selfAssessUpdateCtrl.addCategory()" class="fa fa-plus-circle"></button>
</td>
</tr>, length: 1, prevObject: {0: <table id="admin-self-assessment-table" class="table">
<tbody><tr class="admin-self-assessment-table-headers">
<th class="admin-tile" colspan="2">Question Category</th>
<td class="admin-button">
<button id="add-category-button" ng-click="selfAssessUpdateCtrl.addCategory()" class="fa fa-plus-circle"></button>
</td>
</tr>
</tbody></table>, length: 1, prevObject: {0: ..., 1: ..., 2: ..., 3: ..., 4: ..., length: ...}, context: undefined, selector: '#admin-self-assessment-table'}, context: undefined, selector: '#admin-self-assessment-table tr'}

它只显示原始 html 中的 tr。它没有在此范围内正确附加我的新 html。我不知道为什么。我尝试执行 scope.$digestscope.$apply

最佳答案

试试这个,

('<tr class="category-heading admin-self-assessment-question-category">' +
'<td class="category-name" contenteditable="true">Category</td>' +
'<td><button class="button-coloring category-button-add fa fa-plus-circle"></button></td>' +
'<td><button class="button-coloring category-table-delete fa fa-times-circle"></button></td>' +
'</tr>').appendTo( $('#admin-self-assessment-table') );

appendTo 与 append() 略有不同。另外,你没有 ('<tr ...' )作为$('<tr ... ') ,所以它不是 jQuery 对象。正在关注the docs更接近你会使用 jQuery 对象 $()与 .append() 和 .appendTo() 一起使用。要访问 jQuery 函数,您需要从 jQuery 对象调用它们(这是由于 jquery 库的面向对象的特性)。此外,同时使用 angular 和 jquery 并不是最佳做法,但有时可以奏效。

关于javascript - 在按钮单击事件更改事件 html 后,如何获取单元测试范围内的 html 以进行更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41513647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com