Chúng ta có vài phương pháp trong Bộ điều khiển góc, không nằm trong biến phạm vi.Làm thế nào chúng ta có thể kiểm tra các phương pháp điều khiển góc không phạm vi?
Có ai biết, làm thế nào chúng ta có thể thực hiện hoặc gọi những phương pháp đó trong các bài kiểm tra Jasmine?
Đây là mã chính.
var testController = TestModule.controller('testController', function($scope, testService)
{
function handleSuccessOfAPI(data) {
if (angular.isObject(data))
{
$scope.testData = data;
}
}
function handleFailureOfAPI(status) {
console.log("handleFailureOfAPIexecuted :: status :: "+status);
}
// this is controller initialize function.
function init() {
$scope.testData = null;
// partial URL
$scope.strPartialTestURL = "partials/testView.html;
// send test http request
testService.getTestDataFromServer('testURI', handleSuccessOfAPI, handleFailureOfAPI);
}
init();
}
Bây giờ trong thử nghiệm hoa nhài của tôi, chúng tôi đang đi "handleSuccessOfAPI" và phương pháp "handleFailureOfAPI", nhưng đây là những không xác định.
Đây là mã thử nghiệm hoa nhài.
describe('Unit Test :: Test Controller', function() {
var scope;
var testController;
var httpBackend;
var testService;
beforeEach(function() {
module('test-angular-angular');
inject(function($httpBackend, _testService_, $controller, $rootScope) {
httpBackend = $httpBackend;
testService= _testService_;
scope = $rootScope.$new();
testController= $controller('testController', { $scope: scope, testService: testService});
});
});
afterEach(function() {
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
});
it('Test controller data', function(){
var URL = 'test server url';
// set up some data for the http call to return and test later.
var returnData = { excited: true };
// create expectation
httpBackend.expectGET(URL).respond(200, returnData);
// make the call.
testService.getTestDataFromServer(URL , handleSuccessOfAPI, handleFailureOfAPI);
$scope.$apply(function() {
$scope.runTest();
});
// flush the backend to "execute" the request to do the expectedGET assertion.
httpBackend.flush();
// check the result.
// (after Angular 1.2.5: be sure to use `toEqual` and not `toBe`
// as the object will be a copy and not the same instance.)
expect(scope.testData).not.toBe(null);
});
});
Đúng. Hơn nữa, chúng ta không nên thử nghiệm các chức năng riêng. Nói chung, 'init()' là đơn vị được thử nghiệm với dữ liệu giả định sẽ đảm bảo 'handleSuccessOfAPI' hoặc' handleFailureOfAPI' được gọi. Các đối tượng/dữ liệu được giả lập sẽ điều khiển đường dẫn thực thi. – dmahapatro
Tôi thấy phạm vi $ làm cho hàm/biến công khai (khi so sánh nó với một cái gì đó như Java). Tôi không quá quen thuộc với thử nghiệm đơn vị trong Java, nhưng có phải "không thử nghiệm các chức năng riêng tư" mà bạn thường làm trong Java không? – Chris
Chris, tôi cũng có kinh nghiệm viết bài kiểm tra giới hạn nói chung, đã viết một số bài kiểm tra JUnit nhưng tôi không có nghĩa là một chuyên gia trong thử nghiệm hay bất cứ điều gì. Tôi tưởng tượng vì các hàm riêng không được hiển thị khi bạn khởi tạo một thể hiện của một đối tượng mà bạn vẫn còn đang bị ràng buộc tương tự mà bạn chỉ có thể kiểm tra những thứ có thể truy cập công khai. Tôi nghĩ cuối cùng điều này có ý nghĩa vì bạn thực sự quan tâm đến một đoạn mã hoàn thành một nhiệm vụ theo kiểu hộp đen khi bạn viết một bài kiểm tra, đó là nếu tôi cung cấp x tôi mong đợi y, nhưng các chi tiết thực hiện không một mối quan tâm. – shaunhusain