加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

mocking – 如何使用Jest模拟对象中的特定函数?

发布时间:2020-12-14 04:57:36 所属栏目:百科 来源:网络整理
导读:我正在使用Jest测试React / Reflux应用程序.我在商店里有以下功能: onLoad: function() { console.log("ORIGINAL LOAD"); // http request here} 我试图嘲笑它,以便它只是做它需要做的事情而不做实际的网络东西: beforeEach(function() { // mock out onLo
我正在使用Jest测试React / Reflux应用程序.我在商店里有以下功能:

onLoad: function() {
  console.log("ORIGINAL LOAD");
  // http request here
}

我试图嘲笑它,以便它只是做它需要做的事情而不做实际的网络东西:

beforeEach(function() {

  // mock out onLoad so instead of making API call the store gets test data
  PostStore.onLoad = jest.genMockFunction().mockImplementation(function () {
    var p1 = new Post(
      "54da7df5119025513400000a",// id
      "Test Post",// title
      "Kji6ftLjUqhElgnqOBqMUKxYONpU7nK/cu6jTA==n",// owner anonId
      "Test Course 1",// course name
      "This is a test!",// content
      6,// upvotes
      2,// downvotes
      ["Kji6ftLjUqhElgnqOBqMUKxYONpU7nK/cu6jTA==n"] // voter anonIds
    );

    this.posts = [p1];
    console.log("mocked function");
  });

  // component initialized here
});

但是,看起来似乎从未创建过模拟函数.当我运行测试时,控制台仍然记录ORIGINAL LOAD.

覆盖对象方法的正确方法是什么,以便通过执行ajax调用而不是在PostStore中设置posts数组,它只是用测试数据设置它?

解决方法

几乎就在那里,你需要做的就是

const onLoad = jest.fn().mockImplementation(function () {
    var p1 = new Post();//Add your stuff here
    this.posts = [p1];
    console.log("mocked function");
  });
PostStore.onLoad = onLoad.bind(PostStore); //PostStore is your object.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读