我正在进行控制器测试,但似乎spec.rb是错误的。 你有什么建议吗?
这是我的posts_controller.rb
:
class PostsController < ApplicationController
def create
@post = Post.new(post_params)
if @post.save
redirect_to @wall
end
end
def destroy
@post.destroy
end
private
def post_params
params.require(:post).permit(:wall, :content)
end
end
这是我的posts_controller_spec.rb
:
require 'rails_helper'
describe PostsController do
let(:wall) { create(:wall) }
describe "#create" do
it "saves the new post in the wall" do
post :create, { wall_id: wall, content: "Some text I would like to put in my post" }
end
end
describe "#destroy" do
it "deletes the post in the wall" do
end
end
end
你能帮我纠正一下我的spec.rb吗?
这是我的错误:
PostsController #创建 将新帖子保存在墙上(FAILED - 1) #破坏 删除墙上的帖子
故障:
1)PostsController #create将新帖子保存在墙上
失败/错误:帖子:创建,发布:{墙:墙,内容:“我希望在我的帖子中添加一些文字”}
ActiveRecord的:: AssociationTypeMismatch:
墙(#2159949860)预计,得到字符串(#2155957040)
#./app/controllers/posts_controller.rb:3:in create'
# ./spec/controllers/posts_controller_spec.rb:8:in
阻止(3级)'
#-e:1:在''
以0.9743秒结束(文件加载时间为3.94秒) 2个例子,1个失败
失败的例子:
rspec ./spec/controllers/posts_controller_spec.rb:7#PostsController #create将新帖保存在墙上
提前谢谢
答案 0 :(得分:1)
您的规范并未包含任何期望,因此它的错误&#34;从这个意义上说。我建议你google&#34; RSpec期望&#34;和/或阅读文档(即https://relishapp.com/rspec/rspec-expectations/docs)。
至于您在评论中提到的错误,这反映了您的生产代码存在问题(即,在案例中缺少redirect
或render
或某些create
模板@post.save
返回nil)。再次,谷歌搜索错误应该产生信息,以帮助您解决此问题,或者您可以阅读http://guides.rubyonrails.org/layouts_and_rendering.html。如果您完全是Rails的新手,我建议您按照其中一个教程进行操作,例如https://www.railstutorial.org/
您还应该更新您的问题以包含该错误信息,因为它具有高度相关性,如果没有它,问题基本上是不完整的。
答案 1 :(得分:0)
你应该期待一些测试。例如,你可以这样做:
RSpec.describe PostsController, type: :controller do
let!(:wall) { create(:wall) }
let(:test_post) {
create(:post, wall_id: wall.id, content: "Something") }
}
describe "POST #create" do
let(:post) { assigns(:post) }
let(:test_wall) { create(:wall) }
context "when valid" do
before(:each) do
post :create, params: {
post: attributes_for(:post, wall_id: test_wall.id, content: "Anything")
}
end
it "should save the post" do
expect(post).to be_persisted
end
end
end
end
这样,当您发布参数时,您期望从rails获得响应。我只编写了测试的后期部分。