Jasmine如何知道它是否应该等待完成()?

时间:2015-02-27 10:33:22

标签: javascript jasmine

我一直在使用Jasmine测试和特别是异步测试一段时间了,我无法弄清楚它是如何检测它是否应该等待并且如果您使用完成可能会超时( )在你的测试中。它工作得非常好,我真的很好奇他们是如何做到的。

让我们进行这个简单的测试。这两个显然是有效的(顺便说一句,即使有没有beforeEach()):

it('Sample test', function () {
    expect(true).toBe(true);
});

it('Sample test with done', function (done) {
    expect(true).toBe(true);
    done();
});

但是,如果我在第二次测试中没有调用done(),它将会超时。

在JS中,他们如何检查你传递给它的函数()是否声明了任何参数?

1 个答案:

答案 0 :(得分:5)

每个函数都有一个.length属性,它返回它具有的形式参数的数量:

console.log(function (a, b, c) { }.length);  // 3
console.log(function () { }.length);         // 0

看来这是茉莉花来源中的相关位置:

for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) {
   var queueableFn = queueableFns[iterativeIndex];
   if (queueableFn.fn.length > 0) {
     attemptAsync(queueableFn);
     return;
   } else {
     attemptSync(queueableFn);
   }
 }

如果.length属性为非零,则将每个测试调用为异步,如果为零,则将其称为同步。