2015-01-26 10 views
13

यदि मैं टाइपस्क्रिप्ट के साथ साइनऑन का उपयोग करता हूं तो मैं अपने ऑब्जेक्ट के उदाहरण में साइनऑन नकली कैसे लगा सकता हूं?मैं साइंस को टाइपस्क्रिप्ट के साथ कैसे उपयोग करूं?

उदाहरण के लिए एक साइनऑनॉक वापस कर दिया जाएगा, लेकिन परीक्षण के तहत मेरे नियंत्रक को इसके निर्माता को पारित एक विशिष्ट सेवा की आवश्यकता हो सकती है।

var myServiceMock: MyStuff.MyService = <MyStuff.MyService (sinon.mock(MyStuff.MyService)); 

controllerUnderTest = new MyStuff.MyController(myServiceMock, $log); 

साइप्रस टाइपस्क्रिप्ट के साथ उपयोग किया जा सकता है?

उत्तर

5

आप प्रकार विस्तृत बनाने के लिए एक <any> प्रकार दावे का उपयोग करने से पहले आप इसे अपनी विशिष्ट प्रकार के संकीर्ण आवश्यकता हो सकती है:

var myServiceMock: MyStuff.MyService = 
    <MyStuff.MyService> <any> (sinon.mock(MyStuff.MyService)); 

बस सिनोन से एक व्यवहार स्पष्ट करने के लिए - हालांकि आप MyStuff.MyService में गुजरती हैं, जो कुछ भी आप mock विधि को पास करने के लिए केवल बेहतर त्रुटि संदेश प्रदान करने के लिए उपयोग किया जाता है।

यदि आप नकली विधियों और गुणों के लिए नकली चाहते हैं, you need to add them

आप स्वचालित रूप से बनाया नकली चाहते हैं, आप प्राप्त कर सकते हैं tsUnit है, जो कि आप ओवरराइड करने के लिए विकल्प चुन सकते हैं कुछ मूलभूत मूल्यों के साथ एक नकली संस्करण बनाता से FakeFactory - जावास्क्रिप्ट में यह बहुत आसान सामान है (प्लस बहुत अधिक नकली का उपयोग नहीं द्वारा कार्यक्षमता, आप सुनिश्चित कर सकते हैं कि आप कार्यान्वयन के बजाय व्यवहार का परीक्षण कर रहे हैं)।

FakeFactory की

उदाहरण उपयोग:

var target = tsUnit.FakeFactory.getFake<RealClass>(RealClass); 
var result = target.run(); 
this.areIdentical(undefined, result); 
+1

हाँ, मैं इस के समान कुछ किया। मैंने यह भी सीखा कि मैं साइनऑन ऑब्जेक्ट का गलत इस्तेमाल कर रहा था, मुझे एहसास नहीं हुआ कि मुझे बस इतना करना है कि कॉल में मूल MyService इंस्टेंस का उपयोग करें और यह साइनऑन मैक्स/स्टब्स का उपयोग करता है। जो आपने यहां रखा है, उसके लिए जो भी मैं पूछ रहा था उसके लिए सही लगता है, धन्यवाद! – Brandon

+0

मैं इस पर वापस था और ऐसा लगता है जैसे यह काम नहीं करता है। myServiceMock प्रकट नहीं होता है जैसे कि इसमें कोई तरीका है। कोई विचार? – Brandon

+0

क्या आपने इसे एक उम्मीद दी है? 'myServiceMock.expects (" doSomething ")। रिटर्न (42);' – Fenton

11

सिनोन mock के बजाय, काफी आसानी से अगर एक निर्माता के आधार पर एक ठूंठ बना सकते हैं, तो आप createStubInstance विधि का उपयोग करें।

mocha, chai, sinon और sinon-chai, का उपयोग कर ऐसा दिखाई दे सकता एक उदाहरण:

import * as sinon from 'sinon'; 
import * as chai from 'chai'; 

// ... imports for the classes under test 

const expect = chai.expect; 
const sinonChai = require("sinon-chai"); 

chai.use(sinonChai); 

describe('MyController',() => { 
    it('uses MyService',() => { 

     let myService = <any> sinon.createStubInstance(MyStuff.MyService), 
      controller = new MyStuff.MyController(myService, ...); 

     // ... perform an action on the controller 
     // that calls myService.aMethodWeAreInterestedIn 

     // verify if the method you're interested in has been called if you want to 
     expect(myService.aMethodWeAreInterestedIn).to.have.been.called; 
    }); 
}); 

मैंने published an article है, जो आपके लिए उपयोगी हो सकता है अगर आप विभिन्न परीक्षण डबल्स के बारे में अधिक जानकारी चाहते हैं और Sinon.js के साथ उनका उपयोग कैसे करें।

आशा है कि इससे मदद मिलती है!

जनवरी

+2

आप 'आयात * को' साइनऑन-चाई 'से साइनोनभाई के रूप में भी उपयोग कर सकते हैं; मान लीजिए कि आपके पास प्रकार स्थापित हैं: 'npm i --save-dev @ प्रकार/sinon-chai'। – Westy92

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