proxyquire 错误:ENOENT:没有这样的文件或目录,scandir

Posted

技术标签:

【中文标题】proxyquire 错误:ENOENT:没有这样的文件或目录,scandir【英文标题】:proxyquire Error: ENOENT: no such file or directory, scandir 【发布时间】:2021-12-05 04:50:35 【问题描述】:

您好,我是 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
        );
    )
);

在上面的代码中,我使用的是这样的代理查询:

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 directory 时,我遇到了这个错误,那里有src folder

正如虫子所说:

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 路径路径!

【问题讨论】:

【参考方案1】:

这是sequelize-test-helpers's readme的引述。

为方便起见,makeMockModels 会自动使用您在src/models folder 中定义的所有模型的模拟填充您的模拟模型(或者,如果您有一个 .sequelizerc 文件,它会在其中查找模型路径)。只需覆盖您需要处理的任何特定模型。

所以你需要提供.sequelizerc文件并定义models-path

【讨论】:

以上是关于proxyquire 错误:ENOENT:没有这样的文件或目录,scandir的主要内容,如果未能解决你的问题,请参考以下文章

纱线安装错误“ENOENT:没有这样的文件或目录

错误:ENOENT:没有这样的文件或目录,在进行 Yarn 安装时使用 lstat

反应本机调试器:“错误:ENOENT:没有这样的文件或目录”

Android:NDK:超级打开失败:ENOENT(没有这样的文件或目录)错误

错误:ENOENT:没有这样的文件或目录,stat ... .steampath

Heroku CLI 登录失败并出现错误“错误:ENOENT:没有这样的文件或目录,打开 'H:/_netrc'”