我正在使用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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。