Я тестирую приложение React/Reflux, используя Jest. У меня есть следующие функции в магазине:Как издеваться над определенной функцией в объекте с помощью Jest?
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
.
Каков правильный способ переопределить метод объекта, чтобы вместо того, чтобы устанавливать массив posts
в PostStore
, выполнив вызов ajax, он просто устанавливает его с помощью тестовых данных?
ли вы когда-нибудь решить это? У меня очень похожая проблема, но я тестирую Jasmine и вводя зависимости с помощью Rewire. Я зарегистрировал проблему в репо Reflux GitHub: https://github.com/spoike/refluxjs/issues/300 –
Я никогда не разрешал это, но для Жасмин я рекомендую использовать Sinon для издевательства. – Hugo
спасибо, это оказалось ограничением Rewire, впрыскивая зависимость после загрузки mixin Store Reflux. Я закончил работу с [инъектором-загрузчиком] (https://github.com/plasticine/inject-loader) для webpack –