我对 JavaScript 相当陌生,并且对对象的单元测试有疑问 以及它的方法。 正在使用 JavaScript 绑定(bind)、应用和调用方法 考虑过依赖注入(inject)的一种形式吗? 我问是因为我有几个 我想对使用“this”关键字进行单元测试的函数,我想 在运行测试之前设置这些函数的上下文。我应该调用 具有适当参数的构造函数,然后对这些方法进行单元测试或 我可以使用 apply、call 或 bind 方法之一吗?下面提供的示例:
function assert(v1, v2) {
console.log(v1 === v2);
}
function User(firstName, lastName, identifier) {
this.firstName = firstName;
this.lastName = lastName;
this.identifier = identifier;
}
User.prototype.getUserString = function() {
return this.lastName + ", " + this.firstName + " <" + this.identifier + ">";
}
// First option:
var user = new User('Andrew', 'Schools', '09AF22');
assert(user.getUserString(), 'Schools, Andrew <09AF22>');
// Second option:
var getUserString = User.prototype.getUserString.bind({
'lastName': 'Schools',
'firstName': 'Andrew',
'identifier': '09AF22'
});
assert(getUserString(), 'Schools, Andrew <09AF22>');
我对选项一的担忧是,在调用它们之后,其他方法可以更改自己的属性,从而导致我的测试失败。我想我总是可以在每次测试之前重置变量,但这是额外的工作,特别是如果对象有许多自己的属性。 单元测试时使用apply、call或bind方法有什么问题吗?
最佳答案
I guess I could always reset the variables before every test but that's extra work, especially if the object has many own properties.
其实这并不是很难。为了测试套件,您定义了创建一组对象和模拟以进行测试的方法。并且在每次测试之前重置对象。
var user;
function prepare(){
user = new User('Andrew', 'Schools', '09AF22');
}
prepare();
assert(test1);
prepare();
assert(test2);
这就是为什么像 karma、mocha 这样的测试框架有 beforeEach
方法,允许在每个单元测试之前重置环境。因为每个单元测试不应该依赖于另一个单元测试的结果。
关于javascript - 使用 apply、call 或 bind 方法在 JavaScript 中进行依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30992022/