【发布时间】: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