【问题标题】:proxyquire Error: ENOENT: no such file or directory, scandirproxyquire 错误:ENOENT:没有这样的文件或目录,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 路径路径!

【问题讨论】:

    标签: javascript unit-testing sequelize.js sinon proxyquire


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-28
      • 2021-04-27
      • 2021-12-04
      • 1970-01-01
      • 2022-09-30
      • 2022-06-28
      • 2019-10-14
      • 2019-09-07
      • 1970-01-01
      相关资源
      最近更新 更多