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

时间:2015-07-30 03:02:48

标签: javascript testing meteor jasmine integration

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

jasmine.DEFAULT_TIMEOUT_INTERVAL

这是我的Jasmine测试的样子:

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

我的addTask函数如下所示:

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();

  });

});

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

1 个答案:

答案 0 :(得分:2)

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