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

发布于 2024-12-26 22:35:34 字数 913 浏览 1 评论 0原文

我正在 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,所以我在这里遗漏了一些明显的东西吗?为什么我坚持重定向 ?

希望

回复

I'm writing an integration test for a rails application using Capybara within Rspec. After filling out a form, the user presses submit.

If I run the test I get:

expected there to be content "Welcome to course builder" in "You are
being redirected."

I am trying to test the resulted page content, here is the test:

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

in the PagesController

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

I just started using Capybara, so am I missing something obvious here? Why am I stuck with the redirect response?

Thanks!

hopewise

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼前雾蒙蒙 2025-01-02 22:35:34

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

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

login_student needs to go in a before block:

before(:each) do
  login_student
end

However even that probably won't fix the problem. When using Capybara it is recommended to actually login by visiting the login page for each example, so:

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

It's also helpful to write a special case to handle logins in the test environment, so you can avoid having to create a user for test logins.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文