簡體   English   中英

如何在Sinon js中存根jquery選擇器

[英]How to Stub a jquery selector in Sinon js

我正在做一些單元測試,但我堅持嘗試使用此方法。 我還使用物化下拉菜單,我認為這是相關的。 有人遇到這個問題並且可以提供幫助嗎?

我的代碼去了

componentDidUpdate() {
    $('.dropdown-trigger-filter').dropdown({belowOrigin: true, alignment: 'right', closeOnClick: false});
    this.controller.isFirstLoginRedirect(this.props);
}

我的測試:

describe('Home Component', async () => {
    let container = props => { return <Home store={store} {...props} />;    };

    it('should render correctly', () => {
        const props = {};
        const wrapper = mount(shallow(container(props)).get(0));
        const tree = renderer.create(container(props)).toJSON();

        expect(tree).matchSnapshot();
    });

    it('should change state of selected tab to quotes ', () => {
        const props = {};
        const wrapper = mount(shallow(container(props)).get(0));
        const $ = sinon.stub();
        $.withArgs('.dropdown-trigger-filter').returns({});
        (wrapper.find('.tab').at(0)).simulate('click');
        expect(wrapper.state('selectedTab')).equal('##quotes');
        expect(wrapper.debug()).matchSnapshot();
    });
});

錯誤:

 TypeError: $(...).dropdown is not a function

您的直接錯誤是您對$進行了存根處理,而現在沒有更多的dropdown屬性。 如果您希望此方法有效,則需要返回一個模擬的dropdown函數以及您碰巧調用的任何其他jquery函數。

最后,您的測試將只是您進行的所有jquery調用的反映。 它們將是復雜且脆弱的,因為您需要創建這么多的存根(stub)只是為了重新生成您正在工作的環境。

因此,由於這個原因,您根本不應該嘗試對jQuery進行存根。 如果發現必須執行此操作,則可能需要重構以便簡化測試。

在這種情況下,您想測試使用的dom是否可以與jquery調用一起使用。 因此,您將需要生成一些DOM並對它運行一些期望,如下所示:

it('should change state of selected tab to quotes ', () => {
    const props = {};
    const wrapper = generateCompleteDom();
    (wrapper.find('.tab').at(0)).simulate('click');
    expect(wrapper.state('selectedTab')).equal('##quotes');
    expect(wrapper.debug()).matchSnapshot();

請注意,它看起來幾乎與您已經擁有的東西相同,除了您不存根任何東西,而只是生成一個更完整的DOM(測試所需的所有內容)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM