मेरे पास config.json फ़ाइल लोड करने के लिए एक कोणीय सेवा जिम्मेदार है। मैं इसे अपने रन चरण में कॉल करना चाहता हूं, इसलिए मैंने अपने $ rootContext में जेसन सेट किया और इसलिए, यह भविष्य में सभी के लिए उपलब्ध है।
मूलतः, यह मैं क्या मिल गया है है:
angular.module('app.core', []).run(function(CoreRun) {
CoreRun.run();
});
मेरे CoreRun सेवा है:
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
};
}
यह ठीक काम करता है और जब मैं परीक्षण यह करने की कोशिश की समस्या आ जाती है । मैं अपनी कॉन्फ़िगरेशन सेवा पर जासूसी करना चाहता हूं, इसलिए यह एक नकली वादा करता है। हालांकि, मैं इसे अपने परीक्षण के लिए कॉन्फ़िगर चरण के दौरान नहीं बना सकता, सेवाएं उपलब्ध नहीं हैं और मैं $ q इंजेक्ट नहीं कर सकता।
जहां तक मैं एकमात्र मौका देख सकता हूं, मुझे कॉन्फ़िगर चरण में, मेरी कॉन्फ़िगरेशन सेवा में नकल करना है, क्योंकि इसे रन ब्लॉक द्वारा बुलाया जाता है।
एकमात्र तरीका जो मैंने पाया है वह jQuery का उपयोग करके वादा उत्पन्न कर रहा है जिसे मैं वास्तव में पसंद नहीं करता।
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);
});
क्या कोई और सही कामकाज करने का कोई तरीका है?
संपादित करें: शायद यह टिप्पणी करने लायक है कि यह एक मुद्दा है जब यूनिट मेरे रन ब्लॉक का परीक्षण करता है।
संभावित डुप्लिकेट [$ q और $ http को .config अनुभाग में इंजेक्शन दिया जा सकता है] (http://stackoverflow.com/questions/20626514/can-q-and-http-be- इंजेक्शन -इन-द-कॉन्फ़िगर-सेक्शन) – Constantine
समान लगता है लेकिन पूरी तरह से अलग है। आपके द्वारा संदर्भित एक वास्तविक मॉड्यूल के कॉन्फ़िगर चरण में $ q इंजेक्शन करने के बारे में है। यह इकाई परीक्षण के कॉन्फ़िगर चरण के दौरान रन ब्लॉक में $ q इंजेक्शन करने के बारे में है, इसलिए आप इसे अपने रन ब्लॉक का परीक्षण करने में सक्षम होने के लिए नकल कर सकते हैं। – jbernal