Saya telah melalui beberapa tutorial dan contoh dasar tetapi saya mengalami kesulitan menulis unit test untuk pengontrol saya. Saya telah melihat cuplikan kode membuat instance pengontrol dan membiarkan sudut menyuntikkan objek $rootScope
yang selanjutnya digunakan untuk membuat objek scope
baru untuk pengontrol. Tapi saya tidak tahu kenapa ctrl.$scope
? tidak ditentukan:
describe('EmployeeCtrl', function () {
var scope, ctrl, $httpBackend;
beforeEach(inject(function (_$httpBackend_, $rootScope, $controller, $filter) {
$httpBackend = _$httpBackend_;
scope = $rootScope.$new();
ctrl = $controller('EmployeeCtrl', { $scope: scope});
expect(ctrl).not.toBeUndefined();
expect(scope).not.toBeUndefined(); //<-- PASS!
expect(ctrl.$scope).not.toBeUndefined(); //<-- FAIL!
}));
});
Saya akhirnya menggunakan variabel scope
alih-alih ctrl.$scope
tetapi kemudian pada pengujian pertama saya, saya tidak tahu cara menguji unit variabel fungsi di dalam pengontrol saya:
Pengontrol:
function EmployeeCtrl($scope, $http, $filter, Employee) {
var searchMatch = function (haystack, needle) {
return false;
}
}
Pengujian unit rusak:
it('should search ', function () {
expect(ctrl.searchMatch('numbers','one')).toBe(false);
});
Inilah yang saya dapatkan
TypeError: Objek # tidak memiliki metode 'searchMatch'
Bagaimana Anda menguji fungsi itu? Sebagai solusinya, saya memindahkan metode saya ke $scope sehingga saya dapat menguji scope.searchMatch
tetapi saya bertanya-tanya apakah ini satu-satunya cara.
Akhirnya, pada pengujian saya muncul $filter
tidak terdefinisi juga, bagaimana cara menyuntikkannya? Saya mencoba ini tetapi tidak berhasil:
ctrl = $controller('EmployeeCtrl', { $scope: scope, $filter: $filter });
Terima kasih
Pembaruan: Metode yang disebutkan di atas untuk menyuntikkan $filter berfungsi dengan baik.