【问题标题】:I want to write rspec test using factory girl for a particular usecase我想为特定用例使用工厂女孩编写 rspec 测试
【发布时间】:2016-10-06 15:14:59
【问题描述】:

我的用例是构建一个内容类型为 json 的 http 请求。例如,我通过基本身份验证(身份验证是基本身份验证可能像 id: bla ,key: blabla)打了一个端点,并且正文是例如:

{ "age":"Name", "properties":{ "age":21} }

并且必须检查响应代码和响应消息。 有时我不想包含年龄(内部必填字段)以查看是否返回了正确的状态代码。 我想以如下方式编写测试:

it 'some test' do
    response = create(:event)
    expect(response.code).to eq(200)
  end

上述测试应该进行http调用并返回响应到assert。 我完全困惑如何为上述场景创建工厂。我是 Rspec 的业余爱好者。

【问题讨论】:

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


    【解决方案1】:

    你需要传递参数来执行POST动作,根据响应状态码你可以断言api调用是否成功?

    你不能在这里使用 factorygirl。

    例如:

    require "rails_helper"
    
    RSpec.describe "Widget management", :type => :request do
    
      it "creates a Widget" do
        headers = {
          "ACCEPT" => "application/json",     # This is what Rails 4 accepts
          "HTTP_ACCEPT" => "application/json" # This is what Rails 3 accepts
        }
        post "/widgets", { :widget => {:name => "My Widget"} }, headers
    
        expect(response.content_type).to eq("application/json")
        expect(response).to have_http_status(:created)
      end
    
    end
    

    参考:https://www.relishapp.com/rspec/ 对于 rspec

    【讨论】:

    • 我的请求:curl -X POST -H "Authorization: Basic dGVzdEFwcDp0ZXN0S2V5" -H "Content-Type: application/json" -d '{ "age":"Name", "properties":{ "age":21} } }' "http://ab.xyz.com"。我的回复将类似于 { "accepted": true, "_itemId": "133b1921-b569-4b32-9645-26d8e46736c4" } ,状态码为 200 。我必须检查状态码是否为 200 。我必须使用工厂女孩编写测试。
    • 请求规范应该发出真实的请求。但是您可以模拟响应。这个答案是一个好的开始——如果您将 VCR 添加到您的项目中,您可以将其配置为返回记录的请求响应。见github.com/vcr/vcr
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多