node.js - NPM Factory-Bot/Girl 如何导出工厂定义以用于我的 NodeJS 规范?
问题描述
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);
});
});
});
提前感谢您的任何建议。
解决方案
您只需要在使用它们之前要求您的工厂定义。
这是您可以执行的操作的示例:
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')
,则需要要求您要使用的工厂定义。
推荐阅读
- angular - JHipster - Angular 6:如何在 index.html 中包含来自 3rd 方模块的 css 文件?
- reactjs - Apollo 客户端持久缓存不起作用
- woocommerce - 将内容添加到 Woocommerce 管理报告中的自定义列
- ios - AVPlayer DecoderNotFound (-11833)。iOS 模拟器支持的编解码器?
- android - 如何获取在 Xamarin.Droid 项目的另一个类中创建的 Intent 的 MainActivity?
- python - 使用 matplotlib 输出与源文件相同图像大小的文件
- c# - 使用字符串路径(例如“category.object.parameter”)获取 YAMLDotNet/SharpYAML 节点
- angular5 - Angular 5 服务被重新实例化
- python - 如何输入公式并得到结果?
- c++ - Make zmqpp::socket::connect a std::future