测试 :id 路由

Testing :id routes

如何测试带有 :id 的路由。

例如,我们假设有这样一条路线

Router.get('/:id/profile

现在,我想做一个测试用例,我从别人的代码中看到的示例场景是他正在传递一串数字(可能是用户 ID 或其他东西)

作为一个被要求测试某些东西的初学者,我如何找到测试某些东西时可以发送的字符串。

例如这里

describe('Admin users API testing', () => {
    it('GET /admin/users/:id/activityLog', (done) => {
        request(URL)
            .get('/admin/users/5a82b1a61dab4b54fj01f212e/activityLog')
            .set('accept', '/application/json')

我们正在向

发送请求
it('GET /admin/users/:id/activityLog

然后看起来像这样

 .get('/admin/users/5a82b1a61dab4b54fj01f212e/activityLog')

在上面的 get 请求中,我们有这样的东西

5a82b1a61dab4b54fj01f212e

所以我的问题是做测试的人是怎么知道的?

在测试开始之前,您需要用一些数据为您的数据库做种。您可以将此 ID 字符串与此种子数据一起传递,并在测试时使用相同的 ID。

如果您在其中一个测试用例中添加此记录,则需要在某个变量中保留 id 字符串以用于此测试用例。

对于这种集成测试。首先,我们必须准备测试数据。如果使用数据库,这意味着我们需要在 运行 测试之前插入它们。

在您的情况下,我们必须在数据库中为 ID 为 5a82b1a61dab4b54fj01f212e 的用户插入 activity 日志。所以稍后,您可以期望在测试中取回此数据。它应该与我们要测试的其他用户一起应用。

应该是:

describe('Admin users API testing', () => {
  before(() => {
    return insertTestData(); // insert test data to database, contain activity log for user 5a82b1a61dab4b54fj01f212e
  });

  it('GET /admin/users/:id/activityLog', (done) => {
    return request(URL)
      .get('/admin/users/5a82b1a61dab4b54fj01f212e/activityLog')
      .set('accept', '/application/json')
      .then(response => {
        expect(response).to.eql([{ // we can match the response with test data 
          log_id: 1,
          activity_name: 'test'
        }])
      });
  })
});