উত্তর:
ফেব্রুয়ারী 2017 এ, তারা এই বৈশিষ্ট্য যুক্ত করে একটি পিআর একীভূত করেছে, এপ্রিল 2017 এ তারা প্রকাশ করেছে।
সুতরাং আপনি ব্যবহারকারীদের / const spy = spyOnProperty(myObj, 'myGetterName', 'get');
সেটটারগুলিতে গুপ্তচরবৃত্তি করতে:
যেখানে মাইওবিজে আপনার উদাহরণ, সেখানে 'মাইগেটেরনাম' আপনার শ্রেণিতে যেমন সংজ্ঞায়িত হয়েছে তার নাম get myGetterName() {}
এবং তৃতীয় পরম টাইপ get
বা set
।
আপনি ইতিমধ্যে যে গুপ্তচর তৈরি করেছেন তাদের সাথে একই অনুরোধগুলি ব্যবহার করতে পারেন spyOn
।
সুতরাং আপনি উদাহরণস্বরূপ করতে পারেন:
const spy = spyOnProperty(myObj, 'myGetterName', 'get'); // to stub and return nothing. Just spy and stub.
const spy = spyOnProperty(myObj, 'myGetterName', 'get').and.returnValue(1); // to stub and return 1 or any value as needed.
const spy = spyOnProperty(myObj, 'myGetterName', 'get').and.callThrough(); // Call the real thing.
এখানে গিথুব উত্স কোডের লাইনটি যেখানে আপনি যদি আগ্রহী হন তবে এই পদ্ধতিটি উপলব্ধ।
আসল প্রশ্নের উত্তর, জুঁই ২..1.১ সহ, আপনি যা করবেন:
const spy = spyOnProperty(myObj, 'valueA', 'get').andReturn(1);
expect(myObj.valueA).toBe(1);
expect(spy).toHaveBeenCalled();
কোনও কারণে আপনি কেবল এটি সরাসরি অবজেক্টে পরিবর্তন করতে পারবেন না? এটি জাভাস্ক্রিপ্ট কোনও বস্তুর কোনও সম্পত্তির দৃশ্যমানতার জন্য বল প্রয়োগ করে না।
spyOn
স্পষ্টভাবে ব্যবহার করা ইঙ্গিত দেয় যে আমি কিছু উপহাস করতে চাই, যখন আমি সরাসরি সম্পত্তি সেট করে দিয়েছিলাম যে আমি কিছু উপহাস করতে চাই এবং আমি নিশ্চিত নই যে কোডটি পড়ার সময় অন্য কেউ বুঝতে পারবেন যে আমি কিছু উপহাস করছি। মামলার অন্য যে আমি বস্তুর ভেতরের আচরণ পরিবর্তন, উদাহরণস্বরূপ যদি আমি একটি অ্যারের জন্য দৈর্ঘ্য সম্পত্তি পরিবর্তন করেন, অ্যারে ছাঁটা হয়, তাই একটি উপহাস ভাল হবে না চাই
spyOn
।
spyOn
সম্পত্তি উপস্থিত না থাকলে জুঁই পরীক্ষাতে ব্যর্থ হয়।
TypeError: Cannot assign to read only property 'sessionStorage' of object '#<Window>'
জুঁইয়ের সেই কার্যকারিতা নেই তবে আপনি একসাথে কিছু ব্যবহার করতে হ্যাক করতে সক্ষম হতে পারেন Object.defineProperty
।
গেটর ফাংশনটি ব্যবহার করার জন্য আপনি আপনার কোডটি রিফ্যাক্টর করতে পারেন, তারপরে গেটারের সন্ধান করুন।
spyOn(myObj, 'getValueA').andReturn(1);
expect(myObj.getValueA()).toBe(1);
and.returnValue(1)
সবচেয়ে ভাল উপায়টি ব্যবহার করা spyOnProperty
। এটা তোলে 3 পরামিতি আশা এবং আপনি পাস করতে হবে get
বা set
কোন তৃতীয় PARAM হিসাবে।
const div = fixture.debugElement.query(By.css('.ellipsis-overflow'));
// now mock properties
spyOnProperty(div.nativeElement, 'clientWidth', 'get').and.returnValue(1400);
spyOnProperty(div.nativeElement, 'scrollWidth', 'get').and.returnValue(2400);
এখানে আমি সেটিং করছি get
এর clientWidth
এর div.nativeElement
অবজেক্ট।
আপনি যদি ES6 (ব্যাবেল) বা টাইপস্ক্রিপ্ট ব্যবহার করে থাকেন তবে আপনি গেট অ্যান্ড সেট অ্যাকসেসর ব্যবহার করে সম্পত্তিটি আটকে দিতে পারেন
export class SomeClassStub {
getValueA = jasmine.createSpy('getValueA');
setValueA = jasmine.createSpy('setValueA');
get valueA() { return this.getValueA(); }
set valueA(value) { this.setValueA(value); }
}
তারপরে আপনার পরীক্ষায় আপনি পরীক্ষা করতে পারেন যে সম্পত্তিটি সেট করা রয়েছে:
stub.valueA = 'foo';
expect(stub.setValueA).toHaveBeenCalledWith('foo');
এটি করার সঠিক উপায় হ'ল সম্পত্তির গুপ্তচর দিয়ে, এটি আপনাকে একটি নির্দিষ্ট মান সহ কোনও বস্তুর উপর সম্পত্তি সিমুলেট করার অনুমতি দেবে।
const spy = spyOnProperty(myObj, 'valueA').and.returnValue(1);
expect(myObj.valueA).toBe(1);
expect(spy).toHaveBeenCalled();
ধরুন এর মতো কোনও পদ্ধতি আছে যার জন্য src
পরীক্ষা করা দরকার ক্ষুদ্র চিত্রটির সম্পত্তি পরীক্ষা করা দরকার
function reportABCEvent(cat, type, val) {
var i1 = new Image(1, 1);
var link = getABC('creosote');
link += "&category=" + String(cat);
link += "&event_type=" + String(type);
link += "&event_value=" + String(val);
i1.src = link;
}
নীচের স্পাইঅন () দ্বারা "নতুন চিত্র" পরীক্ষা থেকে নকল কোড খাওয়ানো হয় কারণ স্পাইঅন কোড এমন একটি বস্তু প্রদান করে যার কেবল একটি এসআরসি সম্পত্তি রয়েছে
যেভাবে ভেরিয়েবলটি "হুক" স্পাইঅন-এর নকল কোডে দৃশ্যমান হতে পারে এবং পরে "রিপোর্টএএবিসিএনএন্ট" বলা হওয়ার পরে
describe("Alphabetic.ads", function() {
it("ABC events create an image request", function() {
var hook={};
spyOn(window, 'Image').andCallFake( function(x,y) {
hook={ src: {} }
return hook;
}
);
reportABCEvent('testa', 'testb', 'testc');
expect(hook.src).
toEqual('[zubzub]&arg1=testa&arg2=testb&event_value=testc');
});
এটি জুঁই ১.৩ এর জন্য তবে "এবং কলফেক" ২.০ নামের পরিবর্তিত হলে 2.0 এ কাজ করতে পারে
আমি একটি কেন্দো গ্রিড ব্যবহার করছি এবং অতএব বাস্তবায়নটিকে একটি গেটর পদ্ধতিতে পরিবর্তন করতে পারি না তবে আমি এটিকে (গ্রিডকে উপহাস করে) পরীক্ষা করতে চাই এবং গ্রিডটি নিজেই পরীক্ষা না করে। আমি একটি স্পাই অবজেক্ট ব্যবহার করছিলাম তবে এটি সম্পত্তি বিদ্রূপকে সমর্থন করে না তাই আমি এটি করি:
this.$scope.ticketsGrid = {
showColumn: jasmine.createSpy('showColumn'),
hideColumn: jasmine.createSpy('hideColumn'),
select: jasmine.createSpy('select'),
dataItem: jasmine.createSpy('dataItem'),
_data: []
}
এটি কিছুটা দীর্ঘ বাতাসযুক্ত তবে এটি ট্রিট কাজ করে
আমি পার্টিতে কিছুটা দেরি করেছি আমি জানি তবে,
আপনি সরাসরি কল অবজেক্টে অ্যাক্সেস করতে পারতেন, যা আপনাকে প্রতিটি কলের জন্য ভেরিয়েবল দিতে পারে
expect(spy.calls.argsFor(0)[0].value).toBe(expectedValue)
valueA
একটিObservable
বাSubject
? আমি পাচ্ছিProperty valueA does not have access type get