如何在Rails 4

时间:2016-01-07 17:07:01

标签: javascript ruby-on-rails json minitest

我正在尝试测试一个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在我的应用程序中完美运行但在我尝试测试时无法识别?

1 个答案:

答案 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'