ฉันมีบริการ AngularJS ที่เขียนไว้และฉันต้องการทดสอบหน่วย
angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
factory('myService', function ($http, fooService, barService) {
this.something = function() {
// Do something with the injected services
};
return this;
});
ไฟล์ app.js ของฉันได้ลงทะเบียนสิ่งเหล่านี้:
angular
.module('myApp', ['fooServiceProvider','barServiceProvider','myServiceProvider']
)
ฉันสามารถทดสอบว่า DI ทำงานได้ดังนี้:
describe("Using the DI framework", function() {
beforeEach(module('fooServiceProvider'));
beforeEach(module('barServiceProvider'));
beforeEach(module('myServiceProvder'));
var service;
beforeEach(inject(function(fooService, barService, myService) {
service=myService;
}));
it("can be instantiated", function() {
expect(service).not.toBeNull();
});
});
สิ่งนี้พิสูจน์แล้วว่าบริการสามารถสร้างขึ้นได้โดยเฟรมเวิร์ก DI อย่างไรก็ตามต่อไปฉันต้องการทดสอบหน่วยบริการซึ่งหมายถึงการเยาะเย้ยวัตถุที่ฉีดเข้าไป
ฉันจะทำสิ่งนี้ได้อย่างไร?
ฉันได้ลองใส่วัตถุจำลองในโมดูลแล้วเช่น
beforeEach(module(mockNavigationService));
และเขียนนิยามบริการใหม่เป็น:
function MyService(http, fooService, barService) {
this.somthing = function() {
// Do something with the injected services
};
});
angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
factory('myService', function ($http, fooService, barService) { return new MyService($http, fooService, barService); })
แต่ช่วงหลังดูเหมือนว่า DI จะหยุดบริการที่สร้างขึ้นโดย DI ทั้งหมด
มีใครรู้บ้างไหมว่าฉันจะล้อเลียนบริการฉีดสำหรับการทดสอบหน่วยของฉันได้อย่างไร
ขอบคุณ
เดวิด