Angular 以编程方式创建唯一且确定的数据测试ID
我正在寻找一种方法来创建用于端到端测试的唯一且确定的测试id。这意味着运行任何迭代都会为完全相同的组件生成完全相同的id,这样测试就有了可靠的方法来引用项目 从在每个按钮上应用指令的示例开始:Angular 以编程方式创建唯一且确定的数据测试ID,angular,angular-directive,Angular,Angular Directive,我正在寻找一种方法来创建用于端到端测试的唯一且确定的测试id。这意味着运行任何迭代都会为完全相同的组件生成完全相同的id,这样测试就有了可靠的方法来引用项目 从在每个按钮上应用指令的示例开始: @Directive({ selector: 'button', }) export class FormControlPropertiesDirective { constructor( private element: ElementRef, ) {
@Directive({
selector: 'button',
})
export class FormControlPropertiesDirective {
constructor(
private element: ElementRef,
) {
}
}
有什么方法可以应用算法或使用元素的某些不同属性来创建确定性的东西吗?如果您设法将组件链接到某个模型,您可以在该模型上使用哈希函数。。。类似这样的散列函数(取自此问题的答案,并将其转换为简单函数):
hashObject(o:any){
var l=2;
var i,c,r=[];
对于(i=0;i19);
r[c]+=o.charCodeAt(i>28)&0x7)).toString(16)+(number&0xfffffff).toString(16);
而(ret.length<8)ret=“0”+ret;
返回ret;
}
或者,如果您真的只需要生成测试ID,您可以使用faker.js()。通过向其数据生成器提供种子,您可以获得确定的结果如果您设法将组件链接到某个模型,您可以在该模型上使用哈希函数…类似这样的哈希函数(摘自该问题的答案,并将其转换为简单函数):
hashObject(o:any){
var l=2;
var i,c,r=[];
对于(i=0;i19);
r[c]+=o.charCodeAt(i>28)&0x7)).toString(16)+(number&0xfffffff).toString(16);
而(ret.length<8)ret=“0”+ret;
返回ret;
}
或者,如果您真的只需要生成测试ID,可以使用faker.js()通过将种子提供给它的数据生成器,你可以得到确定的结果你的问题太宽了。请把它限制在一个问题上。考虑提供你想要达到的和你尝试过的例子。我不觉得这个问题太宽了,我要找的是一种用U标记元素的自动化方法。nique test id属性。到目前为止,我还没有发现任何东西在角度应用程序的多次传递中保持不变。所以类似于…当然,id属性或任意属性,如[data test id]你的问题是太广泛了。请把它限制在一个问题上。考虑提供你想要达到的和你尝试过的例子。我不觉得这个问题太宽了,我要寻找的是用唯一的测试ID来标记元素的自动化方法。属性。到目前为止,我还没有发现任何在角度应用程序的多次过程中保持不变的属性。因此,类似于…当然,id属性或任意属性,如[data test id],将用于针对特定元素进行端到端测试I像用于播种结果的faker实现一样,我唯一不知道的是用作种子的内容。它应该是可从目标html元素提取的内容,不会在应用程序的多次编译/运行中更改。我喜欢faker imple对于播种结果,我唯一不知道的是使用什么作为种子。它应该是可以从目标html元素中提取的东西,在应用程序的多次编译/运行中不会改变。
hashObject(o: any) {
var l = 2;
var i, c, r = [];
for (i = 0; i < l; i++)
r.push(i * 268803292);
function stringify(o) {
var i, r;
if (o === null) return "n";
if (o === true) return "t";
if (o === false) return "f";
if (o instanceof Date) return "d:" + o.toString();
i = typeof o;
if (i === "string") return "s:" + o.replace(/([\\\\;])/g, "\\$1");
if (i === "number") return "n:" + o;
if (o instanceof Function) return "m:" + o.toString().replace(/([\\\\;])/g, "\\$1");
if (o instanceof Array) {
r = [];
for (i = 0; i < o.length; i++)
r.push(stringify(o[i]));
return "a:" + r.join(";");
}
r = [];
for (i in o) {
r.push(i + ":" + stringify(o[i]));
}
return "o:" + r.join(";");
}
o = stringify(o);
for (i = 0; i < o.length; i++) {
for (c = 0; c < r.length; c++) {
r[c] = (r[c] << 13) - (r[c] >> 19);
r[c] += o.charCodeAt(i) << (r[c] % 24);
r[c] = r[c] & r[c];
}
}
for (i = 0; i < r.length; i++) {
r[i] = this.toHex(r[i]);
}
return r.join("");
}
toHex(number: number): string {
var ret = ((number < 0 ? 0x8 : 0) + ((number >> 28) & 0x7)).toString(16) + (number & 0xfffffff).toString(16);
while (ret.length < 8) ret = "0" + ret;
return ret;
}