Я в настоящее время нахожусь в проекте, и мне нужно mock
определенное constructor
class
prototype
, чтобы запустить тест, чтобы он не работал напрямую с моими database
.Я уже пытался исследовать и обнаружил, что мне нужно import
module
в мой файл mock
, а затем export
в мой файл test
и использовать jest.setMock()
для замены модуля в моем файле test.js
.Ниже приведен код того, что я пробовал.
У меня есть Admin
constructor
class
с функцией удаления в его prototype
, отвечающей за удаление из db
admin.js
function Admin(username, email, password, access) {
Users.call(this, username, email, password, access);
}
Admin.constructor = Admin;
Admin.prototype.deleteSingleUser = function(id, accountType) {
this.id = id;
this.accountType = accountType;
let response = "";
if(this.accountType === "admin") {
for(let i in dbData.admin) {
if(dbData.admin[i].id === this.id) {
dbData.admin.splice(i, 1);
fs.writeFileSync('db.json', JSON.stringify(dbData, null, 2));
console.log(dbData.admin);
response = "Account successfully deleted";
}
else {
response = "There is no user registered with this ID";
}
}
}
else if(this.accountType === "user") {
for(let i in dbData.users) {
if(dbData.users[i].id === this.id) {
dbData.users.splice(i, 1);
fs.writeFileSync('db.json', JSON.stringify(dbData, null, 2));
console.log(dbData.users);
response = "Account successfully deleted";
}
else {
response = "There is no user registered with this ID";
}
}
}
else {
response = "Kindly use a valid account type";
}
console.log(response);
return response;
};
Затем в моем каталоге __mocks__
у меня есть файл admin.js
, содержащий базу данных mock
и мой mock
код удаления
__ mocks __ / admin.js
//Imported the admin.js
let Admin = require("../admin");
//Created a mock database
let mockDb = {
"users": [
{
"id": 1,
"username": "aaa",
"email": "aaa@gmail.com",
"password": "aaa",
"access": "user"
}
],
"admin": [
{
"id": 1,
"username": "bbb",
"email": "bbb@gmail.com",
"password": "bbb",
"access": "admin"
}
]
}
//My mock delete function
Admin.prototype.deleteSingleUser = function(id, accountType) {
this.id = id;
this.accountType = accountType;
let response = "";
if (this.accountType === "admin") {
if(mockDb.admin[0].id === this.id) {
response = "Account successfully deleted";
}
else {
response = "There is no user registered with this ID";
}
}
else if (this.accountType === "user") {
if(mockDb.users[0].id === this.id) {
response = "Account successfully deleted";
}
else {
response = "There is no user registered with this ID";
}
}
console.log("Its using the mock");
return response;
};
module.exports = Admin;
Затем в моей папке __test__
у меня есть файл test.js
с моими тестами
__ test __ /test.js
const Admin = require("../admin");
jest.setMock("Admin", require("../__mocks__/admin"));
test("Should check if admin can delete with a wrong id", () => {
let response = Admin.prototype.deleteSingleUser(0, "user");
expect(response).toBe("There is no user registered with this ID");
});
test("Should check if admin can delete a user", () => {
let response = Admin.prototype.deleteSingleUser(1, "user");
expect(response).toBe("Account successfully deleted");
});
Ни один из тестовых примеров не пройден, но оба throw
и error
говорят
Тестовый набор не может быть запущен
Не удается найти модуль «Admin» из «test.js»
2 |const Users = require ("../ main");
3 |const Admin = require ("../ admin");
4 |jest.setMock ("Admin", require ("../ mocks / admin"));
|^
5 |const order = require ("../ order");
6 |let mocks = require ("../ mocks / admin");
7 |let dbData = JSON.parse (fs.readFileSync ('db.json'));
в Resolver.resolveModule (node_modules / jest-resol / build / index.js: 229: 17)
at Object.setMock ( test / test.js: 4: 6)
Мне кажется, что я что-то не так делаю, но, кажется, не могу это указать,Пожалуйста, в чем проблема и как я могу это исправить?Спасибо.