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

Testing an async function with Jasmine in Meteor

我已经在 Whosebug 上查看了其他几个与此相关的问题,但我似乎仍然无法解决我的问题。无论我做什么,似乎 Meteor.call 都没有被调用,或者我是否可以调用它(例如下面的代码示例),无论 jasmine.DEFAULT_TIMEOUT_INTERVAL 设置为,我继续得到以下错误:

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_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
  },
});

我已经坚持了几个星期,任何人都可以提供的任何帮助都会非常有帮助。

永远不会执行处理程序中的期望,因为 Jasmine 不会调用原始的 .call() 方法。为了让它工作,而不是 spyOn(Meteor, "call"); 你应该写 spyOn(Meteor, "call").and.callThrough(); 它将在执行 Jasmine 间谍逻辑后调用原始处理程序。