2015-04-22 2 views
1

Я тестирую файл действий в беспорядке со шуткой и не могу понять, как имитировать возвращаемое значение.Как высмеять возвращаемое значение в другом файле?

Когда я указываю возвращаемое значение (см. Код ниже) для издевающегося модуля в моем тестовом файле, все работает нормально, но когда эта же функция вызывается в модуле, который я тестирую, он появляется как неопределенный.

#MissionActions-test.js 

jest.dontMock('../MissionActions'); 
describe('MissionActions', function() { 
    var GameStore = require(root + 'stores/game/GameStore'); 
    var MissionActions; 

    beforeEach(function() { 
     MissionActions = require('../MissionActions'); 
    }); 

    it('should...', function() { 
     GameStore.getGame.mockReturnValue({test: "test"}); 
     console.log(GameStore.getGame()); // prints {test : "test"} 
     MissionActions.addMissionFromBank(); 
    }); 
}); 

И MissionActions.js, который тестируется.

# MissionActions.js 
var GameStore = require('../../stores/game/GameStore'); 

var MissionActions = { 
    addMissionFromBank: function(bankMission) { 
     var game = GameStore.getGame(); 
     console.log(game); // prints undefined 
    } 
} 

module.exports = MissionActions; 

Моей интерпретация автоматических насмешек API & что установка mockReturnValue на издевались модуля (в данном случае GameStore) применяется на протяжении всего испытания, а не только в пределах тестового файла.

Как бы я мог насмехаться над методом GameStore.getGame(), чтобы он применим и в MissionActions.js?

ответ

3

Я столкнулся с этим и раньше.

Исправление в вашем тесте перемещает требование GameStore в блок beforeEach.

beforeEach(function() { 
    MissionActions = require('../MissionActions'); 
    GameStore = require(root + 'stores/game/GameStore'); 
}); 

Я не уверен в этом на 100%, но я считаю, что mockRegistry имеет ограничение на каждый тест. Поэтому, когда вы требуете его только внутри блока описания, он издевается над этим, как и следовало ожидать. Затем, когда вам требуется MissionActions внутри beforeEach, он запускает новую область. Таким образом, он издевается над MissionActions, а затем начинает издеваться над своими зависимостями и делает новый макет GameStore.

+0

Ничего себе, спасибо огромное. Я не могу поверить, что все было так просто. –

+0

нет не было. и у меня была такая же проблема в моих тестах. Если вы используете babel с импортом, этот материал является убийцей. Жест, по моему мнению, не хватает подробностей в документации. в любом случае @Crob Хороший ответ. – Mihai