Capybara和Rails,为什么在规范中使用have_content会给我“你被重定向。”?

时间:2012-01-13 11:07:56

标签: ruby-on-rails-3 rspec capybara

我正在使用Rspec内的Capybara为rails应用程序编写集成测试。填写表格后,用户按下提交。

如果我参加测试,我会得到:

  

预计会有内容"欢迎来到课程建设者"在"你是   被重定向。"

我正在尝试测试结果页面内容,这是测试:

describe PagesController do

  describe "Quiz testing in chapter" do

    def page_view
       Capybara::Node::Simple.new(@response.body)
    end

    render_views
    login_student

    it "should fail if user chosen wrong answer" do
      page= create_quiz_page_with_two_choices_first_correct
      post :answer_quiz, :page_id=>page.id, :submitted_single_answer=>'2'
      page_view.should have_content("Welcome to course builder")

    end
  end
end
PagesController

中的

def answer_quiz
 ...
 respond_to do |format|
   format.html { redirect_to page }
   format.json { head :ok }
 end
end

我刚刚开始使用Capybara,所以我错过了一些明显的东西吗?为什么我坚持使用重定向响应?

谢谢!

hopewise

1 个答案:

答案 0 :(得分:3)

login_student需要进入before区块:

before(:each) do
  login_student
end

然而,即使这可能也无法解决问题。使用Capybara时,建议通过访问每个示例的登录页面来实际登录,所以:

before(:each) do
  visit login_path # log in test user
end

it "should do something awesome" do
  visit "/awesome"
  page.should have_content("You rock!")
end

编写一个特殊情况来处理测试环境中的登录也很有帮助,这样就可以避免为测试登录创建用户。