azk - 如何设置测试数据库?

azk - how to setup a test database?

我在开发中使用了 azk(它是 Rails 项目上的 Ruby),azk 建立了一个名为 #{manifest.dir}_development 的 MySQL 数据库(带有 manifest.dir 为项目所在的目录名).

问题是,当我尝试 运行 RSpec 测试时,它将访问同一个开发数据库,​​而不是测试数据库。

在过去的几个小时里,我和我的同事一直在苦苦思索如何设置测试数据库。我们该怎么做?

我来自 azk 核心团队,在这里我们通过简单地添加一个额外的具有适当设置的 system+db 对来添加一个测试环境。

当你对测试系统使用 extends 时,它会更容易:

systems({
  example: {
    depends: ["postgres"],
    // ...
  },
  example-test: {
    extends: "example",
    depends: ["postgres-test"],
    scalable: { default: 0, limit: 1 },
    http: false,
    wait: false,
    envs: {
      // envs aren't extended by default. Add all required env vars from the original system here
      // ...
    },
  },
  postgres: {
    // ...
  },
  "postgres-test": {
    extends: "postgres",
    scalable: { default: 0, limit: 1 },
    envs: {
      // Once again, add the required env vars from postgres system here
      POSTGRES_USER: "azk",
      POSTGRES_PASS: "azk",
      POSTGRES_DB  : "#{manifest.dir}_test",
    },
  },
});

确保您的database.yml能够处理DATABASE_URL环境变量(我们强烈建议您使用这个:https://gist.github.com/gullitmiranda/62082f2e47c364ef9617

最后,对于 运行 你的测试,只需执行:

$ azk start postgres-test
$ azk shell example-test -- bundle exec rake test

这应该足够了,但如果您有任何其他问题,请告诉我。