在 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 间谍逻辑后调用原始处理程序。
我已经在 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 间谍逻辑后调用原始处理程序。