javascript - proxyquire 错误:ENOENT:没有这样的文件或目录,scandir
问题描述
你好,我是新来的测试mocha/chai/sinon and sequelize-test-helpers
试图用来proxyquire
覆盖require
但有问题
收到有关路径的以下错误:
Error: ENOENT: no such file or directory, scandir 'C:<local-directories-path>\ecommerce-pern-app\server\src\models'
我不明白为什么有一个src folder
当我根本没有src folder
我proxyquire
在测试文件中使用它的时候,它的路径来自server
目录将是:
服务器/specs/services/user-service.spec.js
"use strict";
const chai = require('chai');
const {match, stub, resetHistory, spy} = require('sinon');
const proxyquire = require('proxyquire');
const path = require('path');
const service = path.resolve('./services/userService.js')
var sinonChai = require("sinon-chai");
chai.should();
chai.use(sinonChai);
console.log(service)
const {makeMockModels, sequelize, dataTypes,} = require('sequelize-test-helpers');
describe('Idea Controller', function () {
const uid = '6a88e9b5-33a2-403f-ac3d-e86413ac101d'
const data = {
email: 'testface@test.com',
password: '123456',
is_admin: false,
first_name: 'Testy',
last_name: 'McTestface',
google_id: null,
facebook_id: null
}
describe('findAll()', function () {
it('Success case ', function () {
const mockResponse = () => {
const res = {};
res.json = stub().returns(res);
return res;
};
let res = mockResponse();
const User = {findAll: stub()};
const mockModels = makeMockModels({User});
Idea.findAll.resolves(data);
const UserService = proxyquire(service, {
"save": {}
});
UserService.findAll({}, res);
Idea.findAll.should.have.been.called; // passes
res.json.should.have.been.called; //fails
});
})
});
在上面的代码中,我使用了这样的 proxyquire:
const proxyquire = require('proxyquire');
const path = require('path');
const service = path.resolve('./services/userService.js')
const {makeMockModel} = require('sequelize-test-helpers');
const mockModels = makeMockModels({User});
const UserService = proxyquire(service, {
"../models": mockModels
});
当我试图使用路径来查找server/service/userService.js
相对位于测试文件中的文件时../../services/userService.js
。src folder
当我什至根本没有时,我就有了这个错误src directory
!
正如错误所说:
Error: ENOENT: no such file or directory, scandir 'C:<local-directories-path>\ecommerce-pern-app\server\src\models'
无论我尝试什么文件路径都不起作用我尝试了 path.resolve、path.join 并直接将路径输入其中../../services/userService.js
这是服务器/服务/userService.js
const Models = require('../models');
const { User } = Models;
const save = async ({ id, ...data }) => {
const user = await User.findOne({ where: { uid: id } })
if (user) return await user.update(data)
return null
}
module.exports = save;
我只希望使用 proxyquire 的路径工作
错误中的 \src\models 路径是什么,我根本没有 src/models 路径!
解决方案
这是从sequelize-test-helpers 的自述文件中引用的。
为方便起见,makeMockModels 将自动使用src/models 文件夹中定义的所有模型的模拟填充您的模拟模型(或者如果您有一个 .sequelizerc 文件,它将在其中查找模型路径)。只需覆盖您需要处理的任何特定模型。
所以你需要提供 .sequelizerc 文件并定义models-path
.
推荐阅读
- javascript - Discord Bot 提醒或警报
- sqlite - 带有可选字符的 sqlite3 查询
- angular-akita - 如何更新秋田州“ui”属性
- r - Data.Table fwrite 减慢写入列表
- sql - 需要帮助 sql server 查询
- django - 具有模态表单的 Django 多表单页面
- javascript - 我应该如何导航到 react-native 中的 JSON 文件?
- python - 从我的 Django 项目中更正登录视图中的错误
- c# - 单元测试 - XUnit - IAssemblyFixture - 以下构造函数参数没有匹配的夹具数据
- c# - UserControl 未填充自定义 DataGrid 中 ItemsPresenter 的宽度