我的Rails api一直存在问题。
罪犯:
context 'as a publisher' do
before { create(:invitation_post) }
it 'shows posts whose invitations are to you' do
authorise publisher # helper which adds an authentication token to the request headers
get :index, params: { expand: ['invitation'] }
expect(json_body[:data].map {|e| e[:invitation][:account] }).to all eq account.id
end
end
错误(因为响应是403):
Failure/Error: expect(json_body[:data].map {|e| e[:invitation][:account] }).to all eq account.id
NoMethodError:
undefined method `map' for nil:NilClass
我用rspec
运行了--bisect
,这帮助我确定了可以运行以重现它的一对示例,这至少使我每次都运行约300个其他测试。但是另一个示例似乎与其他控制器和测试文件完全无关。
在我的政策中,我已经指出了失败的点。我使用user.is_a?(Publisher)
检查用户的类型(正在进行单表继承),该类型应该返回true,但在这种情况下,它不是。但是,如果我说user.class.name == 'Publisher'
,则返回true。
我已经p
在测试和策略中都对用户进行了验证,它们看起来是完全相同的。
其他信息(我很乐意在必要时分享更多信息)
config.use_transactional_fixtures = true
-尝试过true
和false
-似乎无法解决。gem "factory_bot_rails", "~> 4.0"
)的数据DatabaseCleaner
清理数据库的各个点,但似乎也无法解决def index?
user.is_a?(Admin) || user.is_a?(Author) || user.is_a?(Publisher)
end
所以我想问的是-如果用户不是发布者,那可能是什么?我应该怎么做才能修复测试?我们将不胜感激!
编辑
平分线的另一项测试:
it 'returns a list of invitations' do
get :index
expect(json_body[:data].count).to eq 4
end
授权助手:
def authorise(user)
request.headers.merge!({ "Authorization" => JsonWebToken.encode(user_id: user.id) })
end