Mocha.js 如何监视动态调用的函数
我正在使用Javascript、Mocha、Chai和SinonJs。我想做的是监视另一个方法“compareUsingOperator”动态调用的方法“equals”。下面的代码显示了我的类“StringComparator”,其中包含两个方法“equals”和“CompareSingOperator” 在我的单元测试中,我在“equals”方法上设置了一个间谍,如下所示:Mocha.js 如何监视动态调用的函数,mocha.js,chai,sinon,Mocha.js,Chai,Sinon,我正在使用Javascript、Mocha、Chai和SinonJs。我想做的是监视另一个方法“compareUsingOperator”动态调用的方法“equals”。下面的代码显示了我的类“StringComparator”,其中包含两个方法“equals”和“CompareSingOperator” 在我的单元测试中,我在“equals”方法上设置了一个间谍,如下所示: sinon.spy(actual, "equals"); private compareFunctionList: {
sinon.spy(actual, "equals");
private compareFunctionList: {[key in "=" | "!=" | "<>" | "<" | "<=" | ">" | ">="]: string};
public constructor() {
this.compareFunctionList = {
"=" : "equals",
"!=" : "notEquals",
"<>" : "notEquals",
"<" : "lessThan"
"<=" : "lessThanOrEquals",
">" : "greaterThan",
">=" : "greaterThanOrEquals",
};
}
“actual”是“StringComparator”的一个实例
下一步我要打电话:
actual.compareUsingOperator("=", comparator.value1, comparator.value2);
在此方法中,执行以下代码:
const fn: Function = this.compareFunctionList[operator];
return fn.call(this, value1, value2);
这是对“equals”方法的调用。这也是我的问题。我想知道是否叫“等于”。我使用以下断言:
assert.called(actual.equals);
我从chai/sinon那里得到的回答是:
AssertError: expected equals to have been called at least once but was never called
预期的行为应该是绿色测试
我的单元测试有什么问题?在console.log的帮助下,我可以证明已经调用了“equals”
问候
弗洛里安我自己找到了答案。我必须替换:
const fn: Function = this.compareFunctionList[operator];
return fn.call(this, value1, value2);
与:
这是:
private compareFunctionList: {[key in "=" | "!=" | "<>" | "<" | "<=" | ">" | ">="]: Function};
public constructor() {
this.compareFunctionList = {
"=" : this.equals,
"!=" : this.notEquals,
"<>" : this.notEquals,
"<" : this.lessThan,
"<=" : this.lessThanOrEquals,
">" : this.greaterThan,
">=" : this.greaterThanOrEquals,
};
}
private compareFunctionList:{[输入“=”|“!=”|“;”|“=”]:函数};
公共构造函数(){
this.compareFunctionList={
“=”:this.equals,
“!=”:this.notEquals,
“”:this.notEquals,
“=”:此值大于或等于,
};
}
就像这样:
sinon.spy(actual, "equals");
private compareFunctionList: {[key in "=" | "!=" | "<>" | "<" | "<=" | ">" | ">="]: string};
public constructor() {
this.compareFunctionList = {
"=" : "equals",
"!=" : "notEquals",
"<>" : "notEquals",
"<" : "lessThan"
"<=" : "lessThanOrEquals",
">" : "greaterThan",
">=" : "greaterThanOrEquals",
};
}
private compareFunctionList:{[输入“=”|“!=”|“=”]:string};
公共构造函数(){
this.compareFunctionList={
“=”:“等于”,
“!=”:“notEquals”,
“”:“notEquals”,
“=”:“大于或等于”,
};
}
现在这个类是可测试的
坦克和问候
弗洛里安
private compareFunctionList: {[key in "=" | "!=" | "<>" | "<" | "<=" | ">" | ">="]: string};
public constructor() {
this.compareFunctionList = {
"=" : "equals",
"!=" : "notEquals",
"<>" : "notEquals",
"<" : "lessThan"
"<=" : "lessThanOrEquals",
">" : "greaterThan",
">=" : "greaterThanOrEquals",
};
}