使用Jasmine的Meteor.call()无法正常工作

时间:2015-08-04 15:23:57

标签: meteor callback jasmine

我的Meteor.methods有问题。我需要测试相当复杂的功能,但我不知道如何获得返回值。为了我自己的需要,我写了一个简单的代码:

Meteor.methods({
  returnTrue: function() {
    return true;
    },
    returnFalse: function(){
    	return false;
    }
   });
然后我在Jasmine写了一些琐碎的测试:

describe("Function", function() {
  var tmp;
  it("expect to be true", function(){
    Meteor.call('returnTrue', function(error, result){
	 if(error){
           tmp = false;
	 }
	 else{
	   tmp = result;
     }
	 });
    expect(tmp).toBe(true);
  });
});

在我的测试中,我预计未定义为真。 我试图使用Session.set和Session.get来完成它,但结果相同。 知道我该怎么办?

1 个答案:

答案 0 :(得分:1)

Here这个问题可能会引起您的兴趣。您的代码中有一些误导:

  • 您的电话未达到实际的服务器方式
  • 您在方法的回调之外调用expect,因此tmp尚未设置!

这是一个建议!

describe("Function", function() {
  var tmp;
  it("expect to be true", function(){
    spyOn(Meteor, "call").and.callThrough(); // to actually call the method
    Meteor.call('returnTrue', function(error, result){
     if(error){
           tmp = false;
     }
     else{
       tmp = result;
     }
     expect(tmp).toBe(true); // moved the check inside the callback, once the call is actually executed
     });
    expect(Meteor.call).toHaveBeenCalled(); // check if the method has been called
  });
});