8

我有一个仍然非常简单的 Rails 应用程序,我想使用带有 Cucumber 的 BDD 和带有 RSpec 的 TDD 来开发它。目前,我正在进行一项测试,我想检查是否由于验证错误而无法创建 Organizer 的新实例(这是我拥有的模型)。我想检查要创建的对象的错误数组是否为空,以便我可以确定错误消息可用于在视图中显示它们。

需要'spec_helper'

描述 OrganizersController 做 render_views

describe "POST 'create'" do

  describe "with invalid arguments" do
    before(:each) do
      request.env["HTTP_REFERER"] = organizers_new_path
      @organizer_args = { :name => "" }
    end      

    it "should return a non-empty list of errors" do
      post 'create', :organizer => @organizer_args
      @organizer.errors.empty?.should_not be_true
    end
  end
end      

结尾

我正在基于带有 RSpec 2 和 cucumber-rails 的 Rails 3.2.9 进行开发。

任何建议表示赞赏。谢谢!

4

3 回答 3

16

您应该使用 assigns 方法从控制器操作中获取实例变量:

assigns(:organizer).errors.empty?.should_not be_true
于 2012-12-28T09:41:05.610 回答
11

最新的首选语法是:

expect(assigns(:organizer).errors.empty?).to_not be_true
于 2013-07-02T05:00:36.870 回答
1

感谢您的回答,但我想建议一个更好的语法:

expect(assigns(:organizer).errors).to_not be_empty

(与问题无关)

基本上,只要您有一个以结尾的方法,您就会有相应的以例如?开头的 rspec 匹配器be_

1.odd? #=> true
expect(1).to be_odd
于 2017-10-08T23:22:40.243 回答