2013-06-16 16 views
21

tôi sau AngularJS documentation from here

Vấn đề là tài liệu mô tả chỉ là "thành công/hạnh phúc" chi nhánh của mã này, và không có ví dụ về làm thế nào để kiểm tra nhánh "thất bại".

Điều tôi muốn làm là đặt điều kiện tiên quyết để kích hoạt mã $scope.status = 'ERROR!'.

Dưới đây là ví dụ tối thiểu.

// controller 
function MyController($scope, $http) { 

    this.saveMessage = function(message) { 
    $scope.status = 'Saving...'; 
    $http.post('/add-msg.py', message).success(function(response) { 
     $scope.status = ''; 
    }).error(function() { 
     $scope.status = 'ERROR!'; 
    }); 
    }; 
} 

// testing controller 
var $httpBackend; 

beforeEach(inject(function($injector) { 
    $httpBackend = $injector.get('$httpBackend'); 
})); 

it('should send msg to server', function() { 

    $httpBackend.expectPOST('/add-msg.py', 'message content').respond(500, ''); 

    var controller = scope.$new(MyController); 
    $httpBackend.flush(); 
    controller.saveMessage('message content'); 
    $httpBackend.flush(); 

    // Here is the question: How to set $httpBackend.expectPOST to trigger 
    // this condition. 
    expect(scope.status).toBe('ERROR!'); 
}); 

}); 

Trả lời

13

Bạn đang kiểm tra thuộc tính của controller trong khi bạn đang đặt thuộc tính phạm vi.

Nếu bạn muốn kiểm tra controller.status trong cuộc gọi expect, bạn nên đặt this.status bên trong bộ điều khiển thay vì $scope.status.

Mặt khác, nếu bạn đặt $scope.status trong bộ điều khiển, thì bạn nên sử dụng scope.status thay vì controller.status trong cuộc gọi expect của mình.


UPDATE: Tôi tạo ra một phiên bản làm việc cho bạn trên Plunker:

http://plnkr.co/edit/aaQ7JQV9WlXhou0PYHTn?p=preview

Tất cả các bài kiểm tra được thông qua tại ...

+0

Cám ơn câu trả lời của bạn. Tôi đã cập nhật các ví dụ ... nó chỉ là một bản sao dán từ documentaton chính thức. Điều này không trả lời câu hỏi của tôi. Mô phỏng sẽ vẫn gọi nhánh 'success'. –

+0

Tôi đã tạo một phiên bản làm việc trên Plunker và thêm liên kết vào câu trả lời chính của tôi. – jvandemo

+0

Cảm ơn. Bạn là một anh hùng! :) –