首页 > 解决方案 > 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);
    });
  });
});

提前感谢您的任何建议。

标签: node.jstestingmongoosejasminefactory-bot

解决方案


您只需要在使用它们之前要求您的工厂定义。

这是您可以执行的操作的示例:

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'),则需要要求您要使用的工厂定义。


推荐阅读