AVA似乎解除了实例方法'this'。
class Person {
constructor(name) {
this.name = name;
}
sayMyName() {
const name = this.name;
return new Promise(function (resolve, reject) {
reject(new Error(name));
});
}
}
test('test', async (t) => {
const person1 = new Person('Bob');
const error = await t.throws(person1.sayMyName);
t.is(error.message, 'Bob');
});
对于上面的代码,我得到了这个:
85: const error = await t.throws(person1.sayMyName);
86: t.is(error.message, 'Bob');
87: });
Difference:
"CannBot read property \'name\' of undefinedb"
我试过这样手动绑定这个承诺: person1.sayMyName.bind(person1),但这似乎也不起作用。
答案 0 :(得分:0)
t.throws()
接受承诺,所以你只需要调用你的函数:
const error = await t.throws(person1.sayMyName());
如果您只需要检查错误消息,您的断言可以简化为以下内容:
await t.throws(person1.sayMyName, 'Bob');
AVA似乎解除了实例方法'this'。
不,这就是this
在JavaScript中的工作原理。如果传递类方法,则需要将其绑定到其实例以保留this
。您可能会发现我的auto-bind
模块很方便。