Я написал простой JSON API с экспрессом и пытаюсь использовать мокко для тестирования черного ящика. Тщательное тестирование API требует аутентификации разных пользователей, поэтому каждый тест для конкретной функции состоит как минимум из двух запросов: операции входа в систему и одного или нескольких аутентифицированных запросов, которые проверяют фактическую функцию.
Я не нашел библиотеки, похожей на django.test.client
, для имитации взаимодействия с отслеживанием состояния между HTTP-клиентом и сервером. Supertest кажется популярным, но он очень низкоуровневый по сравнению с тестовым клиентом django. Вот как я бы написал с ним простой аутентифицированный тест (извините за мой coffeescript):
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 это совсем не плохая идиома.