【发布时间】:2015-07-11 17:50:46
【问题描述】:
我很难理解为什么我的模拟方法没有返回我使用 mockReturnValue 指定的值。我正在测试一种简单的方法,该方法检查商店中的帮助程序,以查看用户在继续之前是否经过身份验证。请参阅下面的connectIfAuth。
'use strict';
var AuthStore = require('../stores/AuthStore');
console.log('top ' + AuthStore.isAuthenticated());
var TestClass = {
connect() {
//...use a mock
},
connectIfAuth() {
console.log('in connect if: ' + AuthStore.isAuthenticated());
if (AuthStore.isAuthenticated()) {
this.connect();
}
}
};
module.exports = TestClass;
在我的测试中,我想让 store 中的模拟方法返回 true/false,并测试 connect() 方法是否被调用/未调用,但该方法在我正在测试的方法中返回 undefined。
'use strict';
jest.dontMock('../TestClass.js');
var AuthStore = require('../../stores/AuthStore');
describe('TestClass', function() {
var TestClass;
var connectMock;
beforeEach(function() {
//the store should return true
AuthStore.isAuthenticated = jest.genMockFunction().mockReturnValue(true);
//do I have to require this after I mock out the method(s) in AuthStore?
TestClass = require('../TestClass');
connectMock = jest.genMockFunction();
TestClass.connect = connectMock;
});
it('should return the mocked value', function(){
TestClass.connectIfAuth();
expect(connectMock.mock.calls.length).toBe(1); //is 0
});
});
我的测试输出是:
- 失败 src/scripts/api/tests/TestClass-tests.js (0.121s)
- 顶部未定义
- 在连接中如果:未定义
- ● TestClass › 它应该返回模拟值
- 预期:0 未来:1
- 在规格。 (/Users/blabla/projects/my-client/src/scripts/api/tests/TestClass-tests.js:20:43)
- 在 Timer.listOnTimeout [as ontimeout] (timers.js:112:15)
【问题讨论】: