【发布时间】:2016-06-02 17:12:06
【问题描述】:
我正在使用 rspec 3.4 为我的 Rails 4.2.5 控制器编写 rspec 测试。我有一个控制器方法,它创建@position,然后呈现一个使用来自@position 的数据的感谢页面。网页似乎都正确呈现,但我的 rspec 测试失败,因为它似乎无法识别 @position 对象已传递到感谢页面。
控制器方法是:
def create_application
application = Application.new application_params
application.save
@position = application.position
render "thank_you"
end
rspec 示例是:
it "renders the Thank You page for a successful application." do
position = create :position
application = build :application, position: position
post :create_application, application: application.attributes
expect(response).to render_template("thank_you")
expect(response).to have_http_status(:success)
expect(assigns(:position)).to eq(position)
end
我一直看到的结果是:
Failure/Error: expect(assigns(:position)).to eq(position)
expected: #<Position id: 422, title: "Position Title", description: "This is a description of the position", status: "open", company_id: nil, created_at: "2016-06-02 16:47:19", updated_at: "2016-06-02 16:47:19">
got: nil
(compared using ==)
因此,rspec 似乎没有将@positiion 变量识别为已设置。但是,感谢页面使用 @position 对象的属性,当我手动测试页面时,这些属性会正确显示。
我还有其他类似的 GET 请求规范,它们似乎都可以正常工作。分配是否应该与 POST 请求一起使用?
【问题讨论】:
标签: ruby-on-rails-4 post rspec controller