【发布时间】:2015-11-17 15:28:37
【问题描述】:
我刚刚开始使用 Cucumber (xolvio:cucumber@0.20.2_1) 和 Meteor 来测试我的项目,我很难从我在步骤定义中创建的 Meteor.methods 存根返回值。
注册用户.js
this.When(/^he clicks the verification link in his email$/, function () {
console.log(this.server.call('_getUser'));
});
registration.js
Meteor.methods({
_getUser: function() {
return Meteor.users.findOne({'emails.address': 'anyemail@email.com'});
});
日志输出一个看起来像系统状态的巨大对象。我注意到其他地方有人建议
this.server.call('aMethod').then(function(response) {
// you can use the response here
});
但是当我在我的项目中这样做时,黄瓜会记录 Object [object Object] has no method 'then'。
我还在步骤定义中尝试了Meteor.users.findOne({'emails.address': anemail@email.com});,但收到错误Meteor is not defined
任何帮助或指导将不胜感激。
编辑
我意识到当我记录一个巨大的对象时,这是因为 Meteor 方法_getUser 没有返回任何东西。然后我尝试了Meteor.users.find({}).fetch(),它返回了一个空数组,即使我的流星黄瓜集合有我的用户,这是我遇到的另一个问题。
【问题讨论】:
-
昨晚深夜我正在解决这个完全相同的问题(测试验证链接)。首先,从最近的一些版本开始,黄瓜不再返回 promises,这就是
.then()不再起作用的原因。 xolvio 说我们应该使用browser.executeAsync()来触发服务器方法。有讨论here。我还没有想出正确的方法来做到这一点,所以我期待有人详细回答。 -
有趣。我想我可以排除那个解决方案。谢谢。根据这篇文章:joshowens.me/cucumber-js-and-meteor-the-why-and-how-of-it 对数据库进行检查和断言是不好的,因为端到端测试是从用户的角度来看的。他们没有知识,也不应该了解数据库。这种类型的测试最好通过集成或单元测试来解决。
标签: meteor cucumber meteor-velocity