无法使请求的 Rails 规范正常工作:`#<App:` 的未定义方法“调用”

Mih*_*hai 1 rspec ruby-on-rails rspec-rails

我正在尝试使规范适用于项目。有一个规格设置但没有维护。

我有一个简单的帖子request spec

require 'rails_helper'

RSpec.describe 'Cars API', type: :request do
  let(:organization) { Fabricate(:organization, owner: user) }
  let(:app)          { Fabricate(:app, organization: organization, owner: user) }
  let(:user)         { Fabricate(:user) }

  before do
    #login_api(user)
  end

  describe 'create' do
    describe 'car type' do
      it 'should create a car of type CarType1' do
        expect(Car.count).to eql(0)
        id = '123'
        post("/api/1/organization/#{id}/cars")
        expect(Car.count).to eql(1)

        car = Car.first

        expect(car.type).to eql(Car::CarType1)
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我得到

#<NoMethodError: undefined method `call' for #<App:0x007fee64557080>>
Run Code Online (Sandbox Code Playgroud)

我尝试调试该问题,但没有成功。问题发生在线路上post("/api/1/organization/#{id}/cars")。问题可能出在哪里?

got*_*tva 6

我遇到了这样的问题;)(并花了几个小时来调试源代码)

尝试重命名appap或类似的变量。

# "bad" name
let(:app)          { ... }

# "better" name
let(:ap)          { ... }
# or 
let(:my_app)      { ... }
Run Code Online (Sandbox Code Playgroud)

据我了解,当 RSpec 初始化惰性块时,变量名存在问题let。不确定,但我认为此时App已经初始化,并且 RSpec 发送方法call不会阻塞let,而是阻塞到另一个对象。

注意:您可以使用 before 块并使用实例变量@app