在Jest中手动模拟对象

时间:2017-01-08 22:51:57

标签: javascript unit-testing reactjs jestjs

我正试图在Jest中找出手动模拟。我认为这应该很容易......但事实并非如此。

我的项目目录就像

  • __ tests__
    • 用户test.js
  • 模型
    • user.js的
    • __ mocks__
      • user.js的
  • node_modules
    • ...
  • 的package.json

model / user.js和models / __ mocks __ / user.js都有相同的代码:

tableView.selectRowAtIndexPath(:_)

文件__tests __ / user-test.js如下所示:

module.exports = {
    create(username, password) {
        return new Promise(function(resolve, reject) {
            setTimeout(function() {
                resolve({"username":username, "password": password});
            }, 100);
        });
    }
}

这个工作正常,测试通过,但当我将其更改为:

test('user creation works', () => {
    const user = require('../models/user');
    //const user = jest.mock('../models/user');
    return user.create("mitchell", "boo");
});

它不起作用,吐出来:

test('user creation works', () => {
    //const user = require('../models/user');
    const user = jest.mock('../models/user');
    return user.create("mitchell", "boo");
});

1 个答案:

答案 0 :(得分:14)

啊!弄清楚了!我的文件夹结构很好。结果我对“jest.mock”实际上做了什么有误解。 “jest.mock”改变节点“require”函数的行为来使用mock,它不会自己执行。

我的测试应该看起来像:

jest.mock('../models/user');
test('user creation works', () => {
    const user = require('../models/user');
    return user.create("mitchell", "boo");
});