2014-04-04 16 views
10

Tôi có một đối tượng mà tôi đang chế nhạo để thử nghiệm đơn vị. Về cơ bản trong tập tin thử nghiệm của tôi, tôi thử nó lên như sau:Đối tượng giả trên toàn cầu trong angularjs để kiểm tra hoa nhài/karma

var mockObject = { 
    mockMethod1 : function() {return true}, 
    mockMethod2 : function() {return true} 
}; 


beforeEach(module('myModule') , function ($provide) { 
    $provide.value('realObject',mockObject); 
}); 

Cách tôi hiểu nó là như tôi thử nghiệm chức năng trong tôi Module vv ... bất cứ nơi nào tham chiếu đến "realObject" sẽ sử dụng tôi "mockObject"

Vấn đề của tôi là tôi đã tạo nhiều tệp js để thử nghiệm và tôi không muốn xác định "mockObject" của mình trong mỗi người ... tôi cũng không muốn duy trì nó ở bất kỳ nơi nào nhiều hơn tôi cũng có .

Có cách nào để chuyển "mockObjact" của tôi sang tệp riêng biệt được đưa vào karma.conf.js để làm cho "mockObject" có sẵn để tiêm vào bất kỳ tệp thử nghiệm nào của tôi không ..... dọc theo các dòng cách bạn tiêm $ rootScope

Trả lời

3

Bạn có thể xây dựng một dịch vụ chứa mô hình của bạn và tiêm dịch vụ đó vào từng tệp thử nghiệm.

beforeEach(inject(function($rootScope, $controller, yourMockSvc) { 
    appScope = $rootScope.$new(); 
    appCtrl = $controller('AppController', { 
     $scope: appScope, 
     yourSvc: yourMockSvc 
    }); 
})); 
+0

tôi nghe thấy nơi bạn đang đi với làm cho nó một dịch vụ. Nhưng cách tôi sẽ hình dung nó là một cái gì đó mà tôi sẽ muốn có thể thiết lập một cái gì đó ở đầu thử nghiệm của tôi như: var myMockObject = myService.getObject(); và sau đó sử dụng đối tượng giả đó trong phần còn lại của các bài kiểm tra – Deslyxia

4

Bạn có thể tạo hàm beforeEach toàn cầu nếu được viết bên ngoài ngữ cảnh của một bộ cụ thể, nhưng vẫn được thực thi bởi Jasmine, ví dụ: tạo một tệp tùy chỉnh để tải bởi Karma và viết hàm beforeEach của bạn ở đó mà không kèm theo nó trong một hàm mô tả.

Ví dụ:

var myGlobal; 

beforeEach(function() { 
    // This will run before any it function. 
    // Resetting a global state so the change in this function is testable 
    myGlobal = 10 
}); 

describe('first suite', function(){ 
    it('is a test', function(){ 
     expect(myGlobal).toBe(10); 
     // Set the value to show that beforeEach is executed for each it function 
     myGlobal = 20; 
     expect(myGlobal).toBe(20); 
    }); 

    it('is another test', function(){ 
     expect(myGlobal).toBe(10); 
     myGlobal = 30; 
     expect(myGlobal).toBe(30); 
    }); 
}); 

describe('second suite', function(){ 
    it('is a test', function(){ 
     expect(myGlobal).toBe(10); 
    }); 
}); 

Xem fiddle here

+1

Vâng tôi hiện đang viết nó như một tập tin thử nghiệm toàn cục ... vấn đề là tôi muốn sử dụng đối tượng giả này trong nhiều tệp thử và muốn duy trì bản sao của đối tượng này càng tốt. – Deslyxia

+0

Thế giới là gì? đối tượng giả? Bạn có đang cung cấp giá trị dịch vụ trong nhiều tệp không? Vì đó là câu trả lời - cung cấp giá trị giả định trong một tệp duy nhất cho tất cả các thử nghiệm –

+0

Tôi đoán những gì im không rõ ràng là chính xác cách sử dụng $ cung cấp để đến hàm trong dịch vụ mới được tạo sẽ trả về mockObject. những gì tôi đã làm trước đây chỉ là tạo ra các đối tượng giả trong thử nghiệm và sau đó sử dụng cung cấp. – Deslyxia

1

Chỉ cần xác định đối tượng giả của bạn bên trong của tập tin khác và xuất khẩu nó. Bạn sẽ có thể sử dụng nó trong bất kỳ tập tin nào.

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