config.json dosyasının yüklenmesinden sorumlu bir açısal hizmetim var. Ben çalışma aşamamda aramak istiyorum, bu yüzden json'u $ rootContext'a ayarladım ve bundan dolayı herkes için gelecekte mevcut.
Temelde, bu bende ne olduğunu:
angular.module('app.core', []).run(function(CoreRun) {
CoreRun.run();
});
benim CoreRun hizmetidir Nerede:
angular.module('app.core').factory('CoreRun', CoreRun);
CoreRun.$inject = ['$rootScope', 'config'];
function CoreRun($rootScope, config) {
function run() {
config.load().then(function(response) {
$rootScope.config = response.data;
});
}
return {
run: run
};
}
Bu iyi çalışır ve ben testi bunu çalıştığınızda sorun çıkageldi . Yapılandırma hizmetinde casusluk yapmak istiyorum, bu yüzden sahte bir söz verir. Ancak, sınama aşamasında sınama aşamamdan beri yapamıyorum, hizmetler kullanılamıyor ve $ q enjekte edemiyorum.
Yapılandırma şablonumla dalga geçmek zorunda olduğum tek şansı görebildiğim kadarıyla, yapılandırma aşamasında, çalıştırma bloğu tarafından çağrıldığından beri var.
Şimdiye kadar bulduğum tek yol, gerçekten sevmediğim jQuery'yi kullanarak sözümü üretmektir.
beforeEach(module('app.core'));
var configSample;
beforeEach(module(function ($provide) {
config = jasmine.createSpyObj('config', [ 'load' ]);
config.load.and.callFake(function() {
configSample = { baseUrl: 'someurl' };
return jQuery.Deferred().resolve({data: configSample}).promise();
});
provide.value('config', config);
}));
it('Should load configuration using the correspond service', function() {
// assert
expect(config.load).toHaveBeenCalled();
expect($rootScope.config).toBe(configSample);
});
Daha doğru bir çözüm bulmak için bir yolu var mı?
DÜZENLEME: Muhtemelen bu sadece bir koşumun blok çalıştırdığımda bir sorun olduğunu belirtti.
[Muhtemelen .config bölümüne en fazla $ q ve $ http enjekte edilebilir] olası kopyası (http://stackoverflow.com/questions/20626514/can-q-and-http-be-injected -in-the-config-section) – Constantine
Benzer ama tamamen farklı görünüyor. Önerdiğiniz, gerçek bir modülün yapılandırma aşamasında $ q enjekte etmekle ilgilidir. Bu, bir ünite testinin konfigürasyon fazı sırasında bir çalışma bloğundaki $ q'lık enjekte etmek ile ilgilidir, bu yüzden, run bloğunuzu test edebilmek için alay edebilirsiniz. – jbernal