回到 HTTP 客户端,打开 用户 下面的 更新用户 ,这个请求测试的就是 更新用户 接口。 使用这个接口要用 HTTP 的 PATCH ,接口地址是 /users。
接口会验证用户身份,所以要配置一下身份验证,类型是 Bearer Token,然后在 TOKEN 里面要放一个用户的令牌。请求里面要包含一个主体数据,这个数据里面需要一个 validate 属性,它里面应该再包含一个 password 属性,对应的值就是当前用户登录用的密码。
要更新的用户数据可以放在 update 属性里面,要更新用户的密码就在 update 里面,添加一个 password 属性,对应的值就是更新之后的用户密码。
下面我们可以写几个测试,测试一下这个更新用户接口。 在 user.test 里面,创建一组测试,测试的是 更新用户接口,先用 describe 创建一个 测试组。 标题可以设置成 测试更新用户接口。 提供一个回调参数,在这个函数里面可以用 test 创建一个测试。先测试一下 更新用户时需要验证用户身份 。
一个回调参数,在这个测试里面,先请求一下要测试的接口,声明一个 response,用它表示请求接口得到的响应,等于 await,执行 request ,把 app 交给它,然后用 patch 这个方法请求的接口的地址是 /users。
下面可以对这个响应做出一个断言,expect 响应的状态码应该等于 401,因为在请求更新用户接口的时候没有在请求里包含用户的令牌,就会得到一个状态码是 401 的响应。
继续再用 test 创建一个测试,测试一下 更新用户数据,提供一个回调参数,在这个回调函数参数里面,可以先签发一个令牌。
声明一个 token,它的值用一下 signToken 这个方法,提供一个对象参数,里面有一个 payload 属性,属性的值就是要包含在令牌里的数据,里面需要一个 id 属性,对应的值就是 testUserCreated 里的 id 属性的值,再添加一个 name 属性,对应的值是 testUserCreated 里的 name 属性的值。
然后再去请求一下要测试的接口,声明一个 response,等于 await ,执行 request ,把 app 交给它,用 patch 方法请求 /users 这个地址。
请求里面需要包含一个特殊的头部数据,用 set 方法设置这个头部,名字是 Authorization,对应的值是 Bearer 空格,然后再加上给测试用户签发的这个令牌的值。接口会根据这个令牌来判断当前用户是谁。
请求里的主体数据可以交给 send 这个方法,一个对象,里面先添加一个 validate 属性,它里面再添加一个 password 属性,属性的值是用户当前登录的密码。这里就是 testUser.password 。
要更新的用户数据可以放在 update 这个属性里面,一个对象,里面添加一个 name 属性,属性的值就是要更新的用户名,这里可以用一下 testUserUpdated 里的 name 。
这个 testUserUpdated 是我们之前在这个测试文件里准备好的一个数据,它里面有 name 还有 password 这两个属性。它的值就是要更新的用户数据。
这里可以在请求的主体里的 update 里面再添加一个 password ,对应的值是修改之后的密码, 设置成 testUserUpdated 里的 password 。
在下面可以再调取更新之后的这个用户数据,声明一个 user,它的值是 await 执行 getUserById ,把用户的 id 交给这个方法,这里就是 testUserCreated 里的 id 属性的值,再提供一个选项参数,把 password 设置成 true,这样调取的用户数据里面就会包含用户的 password 栏目的值。
再去对比一下用户密码。 声明一个 matched ,等于 await ,执行 bcrypt 上面的 compare 这个方法,对比一下 testUserUpdated.password 跟 user 里的 password 是否匹配。 如果匹配这个 matched 它的值就会是 true。
下面可以做出一些断言,expect 响应的状态码应该等于 200, expect,matched 它的值 toBeTruthy,然后 expect user.name 应该等于 testUserUpdated 里的 name 。
回到终端,运行一下测试, 如果一切都符合我们在测试中做出的断言,测试就会全部通过。