【问题标题】:NPM Factory-Bot/Girl how to export a factory definition for use in my NodeJS specs?NPM Factory-Bot/Girl 如何导出工厂定义以用于我的 NodeJS 规范?
【发布时间】:2019-11-17 08:57:10
【问题描述】:

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.js testing mongoose jasmine factory-bot


    【解决方案1】:

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

    这是您可以做的一个示例:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2015-01-27
      相关资源
      最近更新 更多