我是JS新手。我正在使用Jasmine测试一个使用MongoDB和Mongoose的NodeJS应用程序,我想用动态工厂替换我的静态测试夹具。我觉得https://github.com/ratson/factory-bot看起来不错。
但是,所有示例都来自单个文件,并没有演示文件之间的导出/导入,因此我不知道为了在规范中使用工厂需要执行哪些modules.exports =操作。
如果重要的话,我也在使用ES5。
我的问题是:如何导出此定义?
spec/factories/user.js
const factory = require('factory-bot').factory;
factory.setAdapter(new FactoryBot.MongooseAdapter());
const User = require('../models/user');
factory.define('user', User, {
username: 'Bob',
expired: false
});
factory.extend('user', 'expiredUser', {
expired: true
});然后,我如何使用我的导出,以便我可以制作sampleUsers
spec/controllers/user.js
const reqs = require("../support/require")
describe("GET /users", () => {
describe("index", () => {
var data = {};
var sampleUsers = factory.createMany('user', 5);
beforeEach((done) => {
reqs.Request.get(/users", (error, response, body) => {
data.status = response.statusCode;
data.body = JSON.parse(body);
done();
});
});
it("returns a 200 response status", () => {
expect(data.status).toBe(200);
});
it("responds with the users collection", async () => {
expect(data.body.users).toBe(sampleUsers);
});
});
});提前感谢您的建议。
发布于 2020-12-30 00:43:39
在使用它们之前,您只需要要求您的工厂定义。
以下是您可以执行的操作的示例:
spec/factories/user.js
const { factory } = require('factory-bot');
const User = require('../models/user');
factory.setAdapter(new FactoryBot.MongooseAdapter());
factory.define('user', User, {
username: 'Bob',
expired: false
});
factory.extend('user', 'expiredUser', {
expired: true
});spec/factories/index.js
const { factory } = require("factory-bot");
// Require factories to use with the exported object
require("./user.js");
module.exports = factory;spec/controllers/user.js
const factory = require("../../factories");
...
const sampleUsers = factory.createMany('user', 5);上面的示例和您的示例代码之间的关键区别是index.js文件,它需要factory-bot和所有工厂定义。通过要求定义,您将能够使用它们。
如果直接使用require('factory-bot')而不是require('spec/factories'),则需要使用要使用的工厂定义。
https://stackoverflow.com/questions/58898927
复制相似问题