我正在尝试制作规范在一个项目上工作。有一个规格设置,但没有维护。
我有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
我得到了
#<NoMethodError: undefined method `call' for #<App:0x007fee64557080>>
我试图调试这个问题,但没有运气。
问题发生在post("/api/1/organization/#{id}/cars")
行。
问题可能在哪里?
答案 0 :(得分:2)
我有这样的问题;)(花了几个小时来调试源代码)
尝试将app
重命名为ap
或类似变量。
# "bad" name
let(:app) { ... }
# "better" name
let(:ap) { ... }
# or
let(:my_app) { ... }
当RSpec初始化您的惰性块let
时,我理解变量名中的问题。不确定,但我认为当时App
已初始化,RSpec发送方法call
不会阻止let
,而是阻止另一个对象。
注意:您可以在阻止之前使用并使用实例变量@app
答案 1 :(得分:2)
发生此问题是因为您要覆盖Rails app
变量。将变量重命名为其他内容。它会起作用。
默认情况下,在rails中,app
变量是您的Rails应用程序,它具有call
方法,只要您的应用程序收到来自Rack中间件的任何请求,就会调用该方法。