2014-12-07 15 views
6

Tôi đang sử dụng Jasmine 2.1. Tôi đang cố gắng sử dụng Jasmine 2.1 để kiểm tra một mô-đun. Một trong các mô-đun của tôi có một hàm thực hiện mã không đồng bộ. Tôi cần kiểm tra kết quả của hàm khi ứng dụng được thực hiện xong. Có cách nào để làm việc này không? Hiện nay, mô-đun của tôi trông như thế này:Kiểm tra các cuộc gọi lại không đồng bộ với Jasmine

var otherModule = require('otherModule'); 
function MyModule() { 
} 

MyModule.prototype.state = ''; 
MyModule.prototype.execute = function(callback) { 
    try { 
    this.state = 'Executing'; 
    var m = new otherModule.Execute(function(err) { 
     if (err) { 
     this.state = 'Error'; 
     if (callback) { 
      callback(err); 
     } 
     } else { 
     this.state = 'Executed'; 
     if (callback) { 
      callback(null); 
     } 
     } 
    }); 
    } catch (ex) { 
    this.state = 'Exception'; 
    if (callback) { 
     callback(ex); 
    } 
    } 
}; 

module.exports = MyModule; 

Tôi cố gắng để kiểm tra mô-đun của tôi với những điều sau đây:

var MyModule= require('./myModule'); 
describe("My Module", function() { 
    var myModule = new MyModule(); 
    it('Execute', function() { 
    myModule.execute(); 
    expect(myModule.state).toBe('Executed'); 
    }); 
}); 

Rõ ràng, kiểm tra không chờ để thực hiện xảy ra. Làm cách nào để kiểm tra chức năng được thực thi không đồng bộ thông qua Jasmine? Ngoài ra, tôi có sử dụng biến trạng thái đúng không? Tôi bị mất trong ngăn xếp không đồng bộ và tôi không chắc chắn nơi tôi có thể sử dụng 'this'.

Trả lời

8

Tôi khuyên bạn nên xem qua số async section of the jasmine docs. Như vậy, với thông tin này, chúng tôi có thể sử dụng một callback done chờ đợi để thực hiện để kết thúc trước khi thử nghiệm bất cứ điều gì, như thế này:

var MyModule= require('./myModule'); 
describe("My Module", function() { 
    var myModule = new MyModule(); 
    it('Execute', function(done) { 
    myModule.execute(function(){ 
     expect(myModule.state).toBe('Executed'); 
     done(); 
    }); 
    }); 
}); 
+0

Bạn có chắc chắn rằng chúng ta có thể sử dụng 'mong đợi (...) Tobe (... .) 'bên trong của gọi lại async? –

+0

Chỉ cần kiểm tra, yep, cho Jasmine 2.1 nó hoạt động tốt. Đối với hoa nhài trước 2.0, hỗ trợ async trông hoàn toàn khác nhau. –

+0

@VlasBashynskyi có, hoa nhài bây giờ có hỗ trợ không đồng bộ. Nó sẽ đợi cho đến khi 'done()' được gọi. (Thời gian chờ 5 giây theo mặc định) – Hlung

Các vấn đề liên quan