jsMockito方法调用断言未按预期工作
jsMockito method invocation assertion not working as expected
在用QUnit+JsMockito测试Javascript对象时,我很难做出一些方法调用断言。基本基础设施运行正常:Quit、JsHamcrest(Jsmockito依赖项)和Jsmockitos在套件定义中正确初始化。
我想断言对"dataStore#create"方法的调用,并将对象作为参数,如下所示:
var store = {create: function(arg) {}};
test("save()", function() {
var dataStoreMock = mock(store);
var objectUnderTest = { value: 'aaa',
dataStore: dataStoreMock,
save: function() {this.dataStore.create({name: this.value});}}
objectUnderTest.save();
verify(dataStoreMock).create({name: 'aaa'});
});
我得到断言错误:"需要但未调用:obj.create(等于[object object])"
我的第一个怀疑是对象平等没有像我预期的那样工作,证据是断言在传递原始数据类型而不是对象的调用上使用时有效:
this.dataStore.create(this.value); //actual code
verify(dataStoreMock).create('aaa'); //test
我尝试使用jsHamcrest的"equalTo"匹配器(如jsMockito文档中所述),但也没有成功:
verify(dataStoreMock).create(equalTo({name: 'aaa'}));
有人对如何使这种断言起作用有什么想法吗?
断言检查的是对象本身,而不是其属性,JsHamcrest'equalTo'匹配器不会对对象进行深度检查(它与javascript'=='运算符相同)。
你可以简单地检查它是否是一个对象:
verify(dataStoreMock).create(object());
或者有一个JsHamcrest匹配器"hasMember",您可以将其用作:
verify(dataStoreMock).create(hasMember('name'));
如果您使用的是jshamcrest 0.6.4或更高版本(或当前的HEAD),那么您也可以通过将matcher作为第二个参数传递给hasMember:来验证该成员
verify(dataStoreMock).create(hasMember('name', 'aaa'));
verify(dataStoreMock).create(hasMember('name', equalTo('aaa')));
相关文章:
- Javascript form.submit()方法是如何工作的
- JavaScript中的这个call()-方法是如何工作的
- Jquery ajax方法请求体为null,但poster工作正常
- 我该如何阻止单击方法多次工作
- jQuery方法未按预期工作-toggleClass
- 如何让应用程序帮助程序方法在发送的请求为 JS 格式时工作
- jQuery on() 方法只能通过 childSelector 间接工作
- .html() 方法的 jQuery 在 IE 9 中无法正常工作
- 让 jquery 为 ajax 添加的元素工作的最佳方法是什么?
- 如何制作Javascript's减少对数组数组的方法工作
- invoke方法在Lodash中是如何工作的
- Jquery Ajax POST方法不工作,返回未定义的值
- sort和reverse方法在JavaScript中无法正常工作
- jsPDF addHTML方法不工作,没有错误消息
- 这个get方法似乎可以工作,但控制台中存在错误
- 无法调用方法“”;getEditResponseUrl"当使用表单ID打开表单时,绑定到工作表的Google
- Jquery Post方法在本地工作,但在服务器上不工作
- Angular onEnter ui.router方法无法正常工作
- 工作方法:document.getElementById(“ElementName”).style="显示:阻
- 汤博乐:如何用后标记控制CSS(更新:没有JQuery的工作方法!)