2013-02-20 29 views
5

Tôi mới để thử nghiệm đơn vị và cố gắng nắm bắt mọi thứ. Tôi đang cố hết sức để làm theo hướng dẫn này: http://www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-testacular.html#testing-filters. Trong ứng dụng AngularJS của tôi, tôi có một bộ lọc mà tôi cần kiểm tra. Tôi có Node, Testacular, và Jasmine được thiết lập và chạy đúng cách. Bộ lọc mà tôi đang cố kiểm tra khá đơn giản:Kiểm tra bộ lọc hiện diện trong Angular

myApp.filter('bill_ship', function() { 
    return function (userData) { 
     var output = "---"; 
     switch (userData) { 
      case "0": 
       output = "Billing"; 
       break; 
      case "1": 
       output = "Shipping"; 
       break; 
     } 
     return output; 
    } 
}); 

Tôi nghĩ rằng tôi đã thiết lập thử nghiệm đúng cách, nhưng nó luôn thất bại.

describe("Unit Testing: Filters - ", function() { 
    beforeEach(angular.mock.module('prismApp', ['bill_ship'])); 

    //BillShip Filter 
    it('should have a bill-ship filter: ', inject(function($filter){ 
     expect($filter('bill_ship')).not.toEqual(null); 
    })); 
}); 

Không thành công với thông báo này: Lỗi: Đối số 'fn' không phải là hàm, có chuỗi từ bill_ship.

Vậy ... tôi đang làm điều này sai ở đâu?

+0

Có phải 'bill_ship' cũng là tên của mô-đun mà bộ lọc' bill_ship' đang ở? Nếu bộ lọc nằm trong module 'prismApp', bạn không nên chuyển' ['bill_ship'] 'làm tham số thứ hai cho' angular.mock.module'. –

+0

Ứng dụng Góc nằm trong một tệp riêng biệt từ bộ lọc: var myApp = angular.module ("prismApp", []); Bộ lọc được khai báo chính xác như được hiển thị. Nếu tôi bỏ qua tham số thứ hai, nó rên rỉ với tôi về một nhà cung cấp không xác định: Lỗi: Nhà cung cấp không xác định: bill_shipFilterProvider <- bill_shipFilter – MBielski

+0

Bạn có thể thử sử dụng 'beforeEach (module ('prismApp'));' thay thế? Đây là cách chúng ta có beforeEach cho các phép kiểm tra bộ lọc chạy chính xác của chúng ta - hàm 'it (...' có vẻ chính xác. –

Trả lời

1

Ok, điều này lý do tại sao tôi nên không bao giờ mã mà không caffine ...

Nó giúp một LOT khi bạn đặt các tập tin mà bạn muốn kiểm tra trong file config. Cậu bé có cảm thấy ngu ngốc không.

+0

Btw Bạn nên chọn giải pháp của riêng mình để làm câu trả lời – mlunoe

+0

Cảm ơn bạn đã chỉ ra điều đó – MBielski

24

Nếu có ai đó thắc mắc (tôi dành một chút thời gian trước khi phát hiện ra) Tôi nghĩ rằng cách lọc của @MBielski là một chút khó hiểu, nhưng thực sự không tốt lắm! Tuy nhiên, tôi thấy đây là một cách tốt để tiêm các bộ lọc vào môi trường thử nghiệm đơn vị hoa nhài để kiểm tra chúng.

Đây là định nghĩa bộ lọc:

angular.module('prismApp.filters', []) 

    .filter('billShip', function() { 
    return function (userData) { 
     // define filter 
     ... 
    } 
    }); 

Và kiểm tra:

describe("Unit Testing: Filters - ", function() { 
    var billShip; 

    // load the module 
    beforeEach(module('prismApp.filters')); 

    // load filter function into variable 
    beforeEach(inject(function ($filter) { 
    billShip = $filter('billShip'); 
    })); 

    // test billShip filter 
    it('should have a bill-ship filter: ', function() { 
    // test away! 
    expect(billShip).not.toEqual(null); 
    expect(billShip("0")).toEqual("Billing"); 
    ... 
    }); 
}); 

Hope this helps bất cứ ai khác.

+0

Xin chào, điều đó thật đẹp! Cảm ơn bạn đã đăng bài! – MBielski

+0

upvote nếu bạn nghĩ như vậy? – mlunoe

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