我正在尝试使用 Jest 对 Angular UI 运行一个小测试,但我在 5 秒后超时。这是我的代码:
jest.autoMockOff();
require('../../../../bower_components/angular/angular');
require('../../../../bower_components/angular-mocks/angular-mocks');
window.Event = {};
describe('about', function(){
   var mockScope;
   pit('updates the view ', function(done){
        return runTest()
       .then(function(){
           var $ = require('../../../../bower_components/jquery/dist/jquery');
           expect($("#about-div").text()).toEqual('fred');  
       });
    });
    function runTest() {
       var q = require('../../../../bower_components/q/q');
       var defer = q.defer();
       require('../../../../app/scripts/app');
       require('../../../../app/scripts/controllers/about');
       angular.mock.module('app');
       inject(function($rootScope, $controller){
          mockScope = $rootScope.$new();
          controller = $controller('aboutController', {$scope: mockScope});
       });
       document.body.innerHTML =
            '<html>' +
            '   <body>' +
            '      <div ng-controller="aboutController">' +
            '         <div id="about-div" >{{firstName}}</div>' +
            '      </div>' +
            '   </body>' + 
            '</html>';
       setTimeout(function() { defer.resolve(); }, 1000);
       return defer.promise;
   };
});
我正在使用pit,所以我可以有1秒的延迟以允许角度更新视图,但似乎setTimeout中的匿名函数永远不会被调用。承诺没有兑现,测试超时。由于 Jest 使用 Jasmine 1.3.0,我也尝试过使用 runs() 和 waitsFor() 但我得到了相同的结果。