2012-05-11 29 views
37

एंगुलरजेएस यूनिट परीक्षण के बारे में एक अपेक्षाकृत सरल सवाल।कोणीय जेएस नियंत्रक इकाई परीक्षण - इंजेक्शन सेवाएं

angular.module('myApp.services', []).value('version', '0.1'); 

controllers.js:

function MyCtrl1($s, version) { 
    $s.version = version; 
} 
MyCtrl1.$inject = ["$scope","version"]; 

यह महान काम करता है im मैं एक नियंत्रक एक साधारण सेवा (कोणीय-बीज परियोजना से अनुकूलित)

services.js का उपयोग कर मेरा ऐप हालांकि, मुझे यूनिट टेस्ट फ्रेम काम में नियंत्रक बनाने में परेशानी है। मैं यह नहीं समझ सकता कि कैसे 'संस्करण' सेवा इंजेक्ट करें (या उदाहरण बनाएं) और इसे $ नियंत्रक() फैक्ट्री में पास करें - मुझे लगता है कि मैं यही करना चाहता हूं ?!

controllerSpec.js:

beforeEach(inject(function($rootScope, $controller) { 
    scope = $rootScope.$new(); 
    // how about version service? 
    ctrl = $controller(MyCtrl1, {$scope: scope, /* version: <where from?> */}); 
})); 

it('Version should be 0.1 ...', function() { 
    expect(scope.version).toBe('0.1'); 
}); 

परीक्षण दोहन पैदावार चल रहा है: > test.sh

... में विफल रहा है (3.00 एमएस) यहाँ नंगे हड्डियों कल्पना है: त्रुटि: त्रुटि: अज्ञात प्रदाता: संस्करण प्रदाता < - संस्करण त्रुटि: अज्ञात प्रदाता: संस्करण प्रदाता < - संस्करण

मैंने $ इंजेक्टर/$ प्रदाता और मॉड्यूल() के साथ विभिन्न चीजों की कोशिश की है लेकिन इसका कोई फायदा नहीं हुआ है। मुझे यकीन है कि जवाब सरल है, लेकिन मैं इसे नहीं देख सकता।

उत्तर

57

बस अपने वर्णन ब्लॉक में beforeEach(module('myApp.services')) जोड़ें। यह परीक्षण मॉड्यूल को "इंजेक्शन" सेवा के साथ परीक्षण इंजेक्टर में लोड करेगा और यह आपके परीक्षण में उपलब्ध कराएगा।

+0

धन्यवाद! वह आसान था। यह मेरे सामने दो (पहले) कॉल - दिलचस्प नहीं था। – iceberg

+30

आइसबर्ग, अगर इसे हल किया गया तो कृपया इसे स्वीकृत उत्तर के रूप में चिह्नित करें। –

+1

वैसे, क्या यह सेवा निर्भरता के साथ नियंत्रक के लिए इकाई परीक्षण लिखना एक अच्छा अभ्यास है? या सेवा के लिए नकली बनाना बेहतर है, और उसके बाद नियंत्रक के लिए एक परीक्षण और सेवा के लिए एक परीक्षा लिखें? –

संबंधित मुद्दे