【问题标题】:Rails 3 RSpec and assert_selectRails 3 RSpec 和 assert_select
【发布时间】:2012-02-07 15:35:33
【问题描述】:

我曾想过尝试使用 Rspec。但是我遇到了 assert_select 的下一个问题。

1) UserController login page open login page contains all expected controls
Failure/Error: assert_select "form[action=?]", "/user/login" do MiniTest::Assertion:
Expected at least 1 element matching "form[action='/user/login']", found 0.
# (eval):2:in `assert'
# ./spec/controllers/user_controller_spec.rb:20:in `block (3 levels) in <top (required)>'

这是我的代码 sn-p

describe UserController do
  describe "login page open" do
    it "login page contains all expected controls" do
      get :login
      assert_select "form[action=?]", "/user/login" do
      assert_select "input[name=?]", "username"
      assert_select "input[name=?]", "password"
      assert_select "input[type=?]", "submit"
    end
  end
end

当我在浏览器中打开登录页面时,此页面会毫无问题地打开。

【问题讨论】:

  • 为什么在使用 RSpec 时会出现MiniTest::Assertion 错误?我猜你的 RSpec 设置有问题!
  • 我也觉得。但我都是靠这个instruction
  • 您的spec/spec_helper.rb 是什么样的?您是否尝试使用 rspec 命令运行您的规范?
  • spec/spec_helper.rb 生成后我没有更改。我尝试使用接下来的几个命令:rake specrspec specbundle exec rspec spec,就像在 Michael Hartl 的“Ruby on Rails 教程”中一样。
  • 你的项目中有没有提到minitest? grep -r "mini" .

标签: ruby-on-rails-3 rspec


【解决方案1】:

默认情况下,RSpec(至少在较新的版本中)会在您运行控制器规范规范时阻止 Rails 呈现视图。他们希望您在视图规范中测试您的视图,而不是控制器规范。由于视图不呈现,assert_select 总是失败。

但是对于那些(像我一样)想要在他们的控制器规范中测试视图的偶尔 sn-p 的人,他们提供了一个 render_views 方法。但是,您必须在 describecontext 块中调用它,而不是在 it 块中。

describe UserController do

  render_views       # <== ADD THIS

  describe "login page open" do
    it "login page contains all expected controls" do
      get :login
      assert_select "form[action=?]", "/user/login" do
      assert_select "input[name=?]", "username"
      assert_select "input[name=?]", "password"
      assert_select "input[type=?]", "submit"
    end
  end
end

【讨论】:

    【解决方案2】:

    控制器测试用于测试控制器。

    assert_select 匹配您的视图代码中的内容。

    最好将控制器与视图分开,这包括对控制器和视图进行的测试。您应该在您的视图测试中使用assert_select(通常在spec/views 上),而不是在您的控制器测试中。

    【讨论】:

      猜你喜欢
      • 2011-12-31
      • 2019-09-30
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      相关资源
      最近更新 更多