我用 express 写了一个简单的 JSON api,我正在尝试使用 mocha 进行一些黑盒测试。全面测试 API 需要以不同用户身份进行身份验证,因此针对特定功能的每次测试至少由两个请求组成:登录操作和一个或多个测试实际功能的经过身份验证的请求。
我还没有找到任何类似于django.test.client
模拟 HTTP 客户端和服务器之间的状态交互的库。Supertest似乎很流行,但与django测试客户端相比,它是非常低级的。这就是我用它编写一个简单的经过身份验证的测试的方式(请原谅我的咖啡脚本):
it 'should return a 200 OK', (done) ->
supertest(server.app)
.post('/login')
.send("username=xxx&password=pass")
.end (err, res) ->
res.should.have.status(200)
supertest(server.app)
.get('/api/users')
.set('cookie', res.headers['set-cookie'][0])
.expect(200, done)
这真的是执行交互的最干净的方式吗?是否有任何库可以帮助我处理异步性(在 99% 的情况下,除了简单的测试序列化之外,我不需要任何东西,回调只是令人困惑)和状态?会是这样的:
it 'should rock', (done) -> myCoolLibrary [
->
@post '/login', {username: "xxx", password: "pass"}, (err, res) =>
res.should.have.status 200
@done()
,
->
@get '/api/users', (err, res) =>
res.should.have.status 200
@done()
]
如果不存在类似的东西,我应该自己写 :-) 对上下文的依赖是因为这些天我使用了太多的 ZappaJS,并且感谢 CoffeeScript 的胖箭头,这根本不是一个坏习惯。