首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsMockito方法调用断言不按预期工作

jsMockito方法调用断言不按预期工作
EN

Stack Overflow用户
提问于 2011-05-23 17:55:46
回答 1查看 903关注 0票数 1

在用QUnit + JsMockito测试Javascript对象时,我很难做出一些方法调用断言。基本基础设施正常工作: Qunit、JsHamcrest(Jsmockito依赖项)和Jsmockito在套件定义中被正确初始化。

我想以对象作为参数断言对"dataStore#create“方法的调用,如下所示:

代码语言:javascript
复制
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(等于对象对象)”

我的第一个怀疑是,对象等式没有像我预期的那样工作,证据是断言在传递原始数据类型而不是对象的调用中使用

代码语言:javascript
复制
this.dataStore.create(this.value); //actual code
verify(dataStoreMock).create('aaa'); //test

我尝试使用jsHamcrest 'equalTo‘matcher (在jsMockito文档中公开),但也没有成功:

代码语言:javascript
复制
verify(dataStoreMock).create(equalTo({name: 'aaa'}));

有没有人对如何使这种断言奏效有任何想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-24 13:56:04

断言是检查对象本身,而不是它的属性,而JsHamcrest 'equalTo‘匹配器不对对象进行深入检查(它与javascript '==’操作符相同)。

您可以简单地检查它是否是一个对象:

代码语言:javascript
复制
verify(dataStoreMock).create(object());

或者有一个JsHamcrest匹配器“hasMember”,您可以将其用作:

代码语言:javascript
复制
verify(dataStoreMock).create(hasMember('name'));

如果您使用的是jshamcrest 0.6.4或更高版本(或当前头部),则还可以通过将匹配器作为第二个参数传递给hasMember来验证该成员:

代码语言:javascript
复制
verify(dataStoreMock).create(hasMember('name', 'aaa'));
verify(dataStoreMock).create(hasMember('name', equalTo('aaa')));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6100965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档