Javascript 在Meteor中使用Jasmine测试异步函数

Javascript 在Meteor中使用Jasmine测试异步函数,javascript,testing,meteor,jasmine,integration,Javascript,Testing,Meteor,Jasmine,Integration,我已经在Stackoverflow上研究了与此相关的其他几个问题,但我似乎仍然无法解决我的问题。无论我做了什么,似乎Meteor.call都不会被调用,或者如果我可以调用它(如下面的代码示例),无论jasmine.DEFAULT\u TIMEOUT\u INTERVAL设置为什么,我都会继续出现以下错误: 错误:超时-在jasmine指定的超时时间内未调用异步回调。默认超时时间间隔。 这就是我的茉莉花测试结果: it("Should be created and not assigned to

我已经在Stackoverflow上研究了与此相关的其他几个问题,但我似乎仍然无法解决我的问题。无论我做了什么,似乎Meteor.call都不会被调用,或者如果我可以调用它(如下面的代码示例),无论jasmine.DEFAULT\u TIMEOUT\u INTERVAL设置为什么,我都会继续出现以下错误:

错误:超时-在jasmine指定的超时时间内未调用异步回调。默认超时时间间隔。

这就是我的茉莉花测试结果:

it("Should be created and not assigned to anyone", function(done) {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000000;

    // Confirm that the User Has Logged in
    expect(Meteor.userId()).not.toBeNull();

    var contact = null;
    var text = "This is a testing task";
    spyOn(Tasks, "insert");
    spyOn(Meteor, "call");

    Meteor.call('addTask', contact, text, function(error, result) {
      expect(error).toBeUndefined();
      expect(result).not.toBeNull();
      done();
    });

    expect(Meteor.call).toHaveBeenCalled();

  });

});
我的addTask函数如下所示:

Meteor.methods({

  addTask: function (contact, text) {
     ... // addTask Code, removed for brevity
  },
});

我在这方面已经坚持了几个星期,任何人能提供的任何帮助都会非常有用。

hander中的期望永远不会实现,因为Jasmine不会调用原始的.call()方法。为了让它工作,而不是间谍(流星,“呼叫”)spyOn(Meteor,“call”)。和.callThrough()执行Jasmine间谍逻辑后将调用原始处理程序。

Wow。这非常有效。函数现在抛出一个错误,但至少处理程序中的期望最终被调用了!谢谢你,好先生!你能解释一下为什么我们只使用spyOn(Meteor,“call”)
而不想调用吗?有时候(实际上,我想大多数时候),人们只想检查某个方法是否被调用,或者检查它被调用了多少次,他们用不同的测试来测试方法本身。@MaximGritsenko如果没有对实际实现的调用,我怎么做?我可以存根实际实现的返回值,然后将存根值传递到回调函数中吗?@Joe,我不确定你的命令是什么。如果您监视一个方法并需要它实际执行,那么可以添加.and.callthrough()。如果您只需要检查是否在未执行方法的情况下调用了该方法,那么只需保留spy即可。