第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我可以監(jiān)視對(duì)象而不是對(duì)象方法嗎?

我可以監(jiān)視對(duì)象而不是對(duì)象方法嗎?

交互式愛(ài)情 2023-11-12 15:22:14
我知道當(dāng)我引用了一個(gè)函數(shù)作為方法的對(duì)象時(shí),我可以使用像下面這樣的間諜來(lái)跟蹤函數(shù)被調(diào)用的次數(shù)。jest.spyOn(myObj, 'myFunc')但是,當(dāng)我引用了我想要使用的函數(shù)時(shí),我該怎么辦?jest.spyOn(myFunc)不起作用為了澄清一下,我想使用該函數(shù)的實(shí)際實(shí)現(xiàn)。我只是想知道它被調(diào)用了多少次以及使用了哪些參數(shù)。當(dāng)我嘗試在普通函數(shù)上查看這些內(nèi)容時(shí),我得到:  expect(received).toHaveBeenCalledWith(...expected)Matcher error: received value must be a mock or spy function這是(大部分)實(shí)際測(cè)試:  it('should set createScrollContextImmediately when result is above the maximum return limit', async () => {    // Arrange    ...    // Act    await fetch(imageID, { size: maxSizePerScroll }, ids, { createScrollContextImmediately: false });    // Assert    expect(fetch).toHaveBeenCalledWith(imageID, { size: maxSizePerScroll }, ids, { createScrollContextImmediately: false });    expect(fetch).toHaveBeenCalledWith(imageID, { size: maxSizePerScroll }, ids, { createScrollContextImmediately: true });    expect(fetch).toHaveBeenCalledTimes(2);  });
查看完整描述

1 回答

?
慕蓋茨4494581

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊

選項(xiàng) 1.您可以使用真實(shí)的實(shí)現(xiàn)來(lái)模擬該fetch函數(shù)。jest.mock并且,我們可以在實(shí)現(xiàn)中添加一個(gè)間諜。你可以為那個(gè)間諜做出斷言。


例如


fetch.ts:


export async function fetch(name) {

  return 'real implementation';

}

fetch.test.ts:


import { fetch } from './fetch';


const fetchSpy = jest.fn();


jest.mock('./fetch', () => {

  const { fetch } = jest.requireActual('./fetch');

  const fetchWithSpy = jest.fn().mockImplementation((...args) => {

    fetchSpy(...args);

    return fetch(...args);

  });

  return {

    fetch: fetchWithSpy,

  };

});


describe('65266282', () => {

  it('should set createScrollContextImmediately when result is above the maximum return limit', async () => {

    const actual = await fetch('teresa teng');

    expect(actual).toBe('real implementation');

    expect(fetchSpy).toBeCalledWith('teresa teng');

    expect(fetchSpy).toHaveBeenCalledTimes(1);

  });

});

測(cè)試結(jié)果:


PASS  examples/65266282/fetch.test.ts

  65266282

    ? should set createScrollContextImmediately when result is above the maximum return limit (8 ms)


Test Suites: 1 passed, 1 total

Tests:       1 passed, 1 total

Snapshots:   0 total

Time:        4.216 s

選項(xiàng) 2.您可以使用Proxy為您的fetch函數(shù)創(chuàng)建代理。


Proxy 對(duì)象使您能夠?yàn)榱硪粋€(gè)對(duì)象創(chuàng)建代理,該代理可以攔截并重新定義該對(duì)象的基本操作。


fetch-v2.test.ts:


import { fetch } from './fetch';


const fetchSpy = jest.fn();

const fetchProxy = new Proxy(fetch, {

  apply: (target, thisArg, argumentsList) => {

    fetchSpy.apply(thisArg, argumentsList);

    return target.apply(thisArg, argumentsList);

  },

});


describe('65266282', () => {

  it('should set createScrollContextImmediately when result is above the maximum return limit', async () => {

    const actual1 = await fetchProxy('teresa teng');

    expect(actual1).toBe('real implementation');

    const actual2 = await fetchProxy('best singer');

    expect(actual2).toBe('real implementation');

    expect(fetchSpy).toBeCalledWith('teresa teng');

    expect(fetchSpy).toBeCalledWith('best singer');

    expect(fetchSpy).toHaveBeenCalledTimes(2);

  });

});

測(cè)試結(jié)果:


 PASS  examples/65266282/fetch-v2.test.ts

  65266282

    ? should set createScrollContextImmediately when result is above the maximum return limit (3 ms)


Test Suites: 1 passed, 1 total

Tests:       1 passed, 1 total

Snapshots:   0 total

Time:        4.484 s

這兩種方法本質(zhì)上是相同的。核心思想是使用代理、攔截器、高階函數(shù)


查看完整回答
反對(duì) 回復(fù) 2023-11-12
  • 1 回答
  • 0 關(guān)注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)