2015-08-15 166 views
0

我试图在我的npm模块上运行测试。下面的代码将工作,如果我注释掉2 it块之一,但超时,如果我把它们都放在下面。在运行测试之前如何等待“准备好”(我想添加更多,但他们也需要等待“准备就绪”)?茉莉花:如何在触发事件后执行一系列测试

describe("GA analytics", function() { 

    var report = new Report(private_key, SERVICE_EMAIL, 1); 

    it("should connect and emit <ready>", function(done) { 
     report.on('ready', function() { 
      console.log("test.js: Token: ", report.token); 
      expect(report.token).toBeDefined(); 
      done(); 
     }); 
    }); 

    it("should get data correctly", function(done) { 
     report.on('ready', function() { 
      report.get(query, function(err, data) { 
       if (err) throw err 
       expect(data.rows).toEqual([ [ '5140' ] ]); 
       done(); 
      }); 
     }); 
    }); 
}); 

回答

0

我猜,因为你每次测试文件创建Report的新实例只有一次,因此ready事件仅在测试触发一次,并且只有第一it块将捕捉到它并处理它正在发生。 it块的其余部分将不会再收到ready事件,所以他们默默等待,直到茉莉花超时。该解决方案将每块it,可以用茉莉花beforeEach的帮助下轻松完成之前创建一个新的Report实例:

describe("GA analytics", function() { 

    var report; 

    beforeEach(function() { 
     report = new Report(); 
    }); 

    // .... 
}); 

See the working example here on Plunker(开出“的script.js”文件)

+0

感谢。与此同时,我已经到达了这个解决方案。 –