我发现使用RSpec请求规范测试JSON API很麻烦(参见下面的代码),因为我每次都必须创建所需的参数(valid_attributes
和invalid_attributes
并且让我困扰很多)我需要发送一个新请求。当我需要发送带有身份验证令牌的请求(另一个请求?)时,测试变得更加困难。
有更好的方法吗?
describe 'POST /users' do
# valid payload
let(:valid_attributes) {
{
data: {
attributes: { email: 'sample@mail.com', password: '1234' },
type: 'user'
}
}
}
# invalid payload
let(:invalid_attributes) {
{
data: {
attributes: { email: '', password: '' },
type: 'user'
}
}
}
context 'when the request is valid' do
before { post '/users', params: valid_attributes }
it 'creates a user' do
expect(response).to have_http_status(201)
end
end
context 'when the request is invalid' do
before { post '/users', params: invalid_attributes }
it 'create a user' do
expect(response).to have_http_status(422)
end
end
end
我用于测试的宝石,
group :test do
gem 'rspec-rails', '~> 3.5'
# Use Factory Girl for generating random test data
gem 'factory_girl_rails', '~> 4.0'
gem 'shoulda-matchers', '~> 3.1'
gem 'faker'
gem 'database_cleaner'
end
答案 0 :(得分:1)
不确定你的想法,但我会删除这样的重复:
def user_with(email: '', password: '')
{
data: {
attributes: { email: email, password: password },
type: 'user'
}
}
end
# valid payload
let(:valid_attributes) { user_with(email: 'sample@mail.com', password: '1234') }
# invalid payload
let(:invalid_attributes) { user_with() }
如果您需要在多个规范文件中重复使用它,请在support
目录中的某个文件中的模块或shared_context中移动它。