我对JavaScript很陌生,对单元测试对象有疑问 这是方法。 使用JavaScript绑定,应用和调用方法 被认为是依赖注入的一种形式?我问,因为我有几个 函数我想要使用'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方法有什么问题吗?
答案 0 :(得分:2)
我想我总是可以在每次测试之前重置变量,但这是额外的工作,特别是如果对象有很多自己的属性。
实际上这并不是很困难。为了您的测试套件,您可以定义创建一组对象和模拟进行测试的方法。并且在每次测试之前重置对象。
var user;
function prepare(){
user = new User('Andrew', 'Schools', '09AF22');
}
prepare();
assert(test1);
prepare();
assert(test2);
这就是为什么像karma,mocha这样的测试框架有beforeEach
方法允许在每次单元测试之前重置环境的原因。因为每个单元测试不应该依赖于另一个单元测试的结果。