我正在尝试测试一个rails应用程序,其中所有操作都返回json格式化数据。例如,在UsersController
# POST /users.json
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.json { render json: @user, status: :created }
else
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
我使用javascript和ajax的那个动作并且完美地工作。现在我尝试使用这段代码测试该动作
test "should create user" do
assert_difference('User.count') do
post "/users.json", user: { email: @user.email, name: @user.name }
end
end
抛出
1)错误:UsersControllerTest#test_should_create_user: ActionController :: UrlGenerationError:没有路由匹配 {:action =>“/ users.json”,:controller =>“users”, :user => {:email =>“MyString”,:name =>“MyString”}} test / controllers / users_controller_test.rb:16:在'block(2 levels)in' test / controllers / users_controller_test.rb:15:在'block in'中
所以我的问题是,如何测试响应json格式的动作?以及为什么路径/users.json
在我的应用程序中完美运行但在我尝试测试时无法识别?
答案 0 :(得分:2)
这是您创建JSON请求的方法
post :create, { user: { email: @user.email, name: @user.name }, format: :json }
这是测试响应类型的方法
RSpec的
expect(response.content_type).to eq("application/json")
MINITEST
assert_includes @response['Content-Type'], 'application/json'