运行 仅用于使用 Jasmine 包进行测试的代码

Running code only for tests using Jasmine package

我在我的应用程序中使用 sanjo:jasminevelocity:html-reporter 包来尝试实施一些单元和集成测试。使用本教程作为指南,我完成了一些单元测试和几个集成测试。我无法弄清楚的是如何在 "test" 环境中将代码获取到 运行,这不是单元测试或集成测试的一部分,但需要在 运行 之前测试且仅用于测试。

我要解决的问题是我需要为测试创建一些虚拟用户,但我不希望它们出现在我的生产应用程序中。有点像 "init" 阶段,您可以在其中构建模型并插入所需的任何数据。有办法实现吗?

  1. 我建议您使用工厂.

    为您的测试创建一些种子或假数据

    我建议您尝试以下软件包:

    • anti:fake - Meteor.js
    • 的假文本和数据生成器
    • dburles:factory - 用于创建测试数据或生成固定装置的包。
  2. 您可以使用此命令安装这些软件包:

    meteor add anti:fake dburles:factory

  3. 仅为测试环境创建出厂数据

我将创建一个名为 server/seeds.js 的文件,其中包含以下内容:

Meteor.startup(function() {

  Factory.define('user', Users, {
      username: "test-user",
      name: "Test user",
      email: "test@example.com"
      // add any other fields you need
  });

  var numberOfUsers = 10;

  // Ensure this is the test environment
  if (process.env.NODE_ENV === 'test') {

    // Create the users from the factory definition
    _(numberOfUsers).times(function(n) {
      Factory.create('user');
    });
  }
});

您可以对任何数据采用这种 工厂 方法,而不仅仅是用户。

如果您的用户需要登录,例如当您使用accounts:base时,那么我会考虑使用工厂数据的替代方法:

var email = "test@example.com";
var password = "secret";
var name = "Test user";

Accounts.createUser({email: email, password: password, profile: {name: name}});

有关详细信息,请参阅 Meteor 文档中的 Accounts.createUser

我一直在使用 mike:mocha,只要您的规格写在名为测试(然后分别是客户端/服务器)的文件夹中,Velocity 就会将数据放入特定于速度的集合中。我 运行 我使用相同的 Meteor 方法在我的主应用程序中插入文档,但 velocity 知道将其放入镜像版本。

如果您正在使用 sanjo:jasmine,您可以在编写规范之前(在 describeit 子句之前)将数据插入镜像数据库,并且此数据可用于所有规格。

此外,您可以使用beforeEach()为每个规格提供数据,然后您可以使用afterEach()删除它。

Here您可以找到更多信息。