【问题标题】:Testing "Post create" with Rspec使用 Rspec 测试“创建后”
【发布时间】:2012-05-11 11:46:18
【问题描述】:

我正在尝试使用 Rspec 测试“创建后”操作。代码如下:

   def valid_attributes
     {
    :zone => Flymgr::Zone.new(:countries => Flymgr::ZoneCountry.first,
        :name => 'USA',
        :description => 'USA Flight',
        :zipcodes => ''),
    :price => '100.00',
    :class => 'first',

     }
   end

   def valid_session
     {}
   end

   before(:each) do
       @request.env["devise.mapping"] = Devise.mappings[:admin]
       admin = FactoryGirl.create(:admin)
       sign_in admin                           
      end

describe "POST create" do
     describe "with valid params" do
       it "creates a new Flymgr::Rule" do
         expect {
           post :create, {:Flymgr_rule => valid_attributes}
         }.to change(Flymgr::Rule, :count).by(1)
       end

表单的必需属性之一是“区域”,这是一个下拉框,下拉框的选项是使用不同的表单创建的。我不知道如何使用 Rspec 创建表单条目。如您所见,我尝试从不同的控制器Flymgr::Zone.new 调用方法。我不认为这是有效的,它打破了我的测试。

任何人都可以建议最好的方法吗?也许我应该使用 FactoryGirl 来创建区域和规则条目?

【问题讨论】:

    标签: ruby-on-rails testing rspec factory-bot rspec-rails


    【解决方案1】:

    您的请求参数哈希有一个对象作为 :zone 的值,当您发布它时,它将只是 'to_s'-ed,这不太可能是您想要的。

    一般来说,最好的做法是使用 factory girl 来构建您的对象并使用 attributes_for 策略来参数化其属性以用于发布请求: What is the proper way to test 'create' controller actions?

    您的问题是暗示该关联是一个belong_to,因此您只需要发布一个ID。请注意,目前,FactoryGirl 不会为关联创建任何属性。如果您的规则工厂定义负责区域关联,您可以使用此解决方法:

    FactoryGirl.build(:flymgr_rule).attributes
    

    还包括 zone_id 但是,您需要排除不需要的参数。 (“id”、“created_at”、“updated_at”等)。

    因此,您最好按照您在有效发布请求中看到的方式明确插入区域的参数哈希信息。

    阅读有关 factorygirl 属性和关联的主题: https://github.com/thoughtbot/factory_girl/issues/359

    【讨论】:

      【解决方案2】:

      正如guide 指出的那样:

      # Returns a hash of attributes that can be used to build a User instance
      attrs = FactoryGirl.attributes_for(:user)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-03
        • 1970-01-01
        • 1970-01-01
        • 2020-11-09
        • 1970-01-01
        相关资源
        最近更新 更多