Spec没有在Rails API项目中遇到控制器操作

时间:2017-03-23 00:47:20

标签: ruby-on-rails json rspec

我有一个请求规范,它应该在AnagramsController中点击show动作。

这是我的路线文件的样子 resources :anagrams, only: [] do get '/', to: 'anagrams#show', on: :collection end

当我耙我的路线时,我可以看到我有我想要的路线:
anagrams GET /anagrams(.:format) anagrams#show

我运行看起来像这样的请求规范

require "rails_helper"

RSpec.describe "Anagram API", type: :request do

  describe "GET /anagrams" do
    context "fetch for words with anagrams" do

      it "finds the anagrams" do
        get "/anagrams", params: {word: ["read"]}
        expect(JSON.parse(response.body)).to eq(["dare", "dear"])
        expect(response).to have_http_status(200)
      end
    end
  end
end

我希望测试能够在我的控制器中点击show动作

class AnagramsController < ApplicationController

  def show
    word_passed_in = params[:word].first
    results = AnagramFinder.fetch_anagrams(word_passed_in)
    end
    json_response(results)
  end

  private
  def anagram_params
    params.require(:word)
  end

end

然而,当我运行规范时,我看到了:

F

Failures:

  1) Anagram API GET /anagrams fetch for words with anagrams finds the anagrams
     Failure/Error: expect(JSON.parse(response.body)).to eq(["dare", "dear"])

     JSON::ParserError:
       757: unexpected token at '<!DOCTYPE html>
       <html>
       <head>
           <title>SyntaxError at /anagrams</title>
       </head>
       <body>
           <style>
           /* Basic reset */
           * {
               margin: 0;
               padding: 0; and on and on and on

我在控制器的show动作中有一个binding.pry,并且规格没有击中撬。

1 个答案:

答案 0 :(得分:0)

我没有看到完整的代码,但是你的show action

还有一个额外的结局
 def show
    word_passed_in = params[:word].first
    results = AnagramFinder.fetch_anagrams(word_passed_in)
    end
    json_response(results)
  end

应该是

 def show
    word_passed_in = params[:word].first
    results = AnagramFinder.fetch_anagrams(word_passed_in)

    json_response(results)
  end