Ruby on rails 尝试添加重复节点时Rails rspec测试失败
我正在使用rspec测试一个API,我正在开发这个API,以便与我的android应用程序通信 由于某种原因,当我运行此测试时Ruby on rails 尝试添加重复节点时Rails rspec测试失败,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我正在使用rspec测试一个API,我正在开发这个API,以便与我的android应用程序通信 由于某种原因,当我运行此测试时 it "tries to add an existing node (same mac address but better signal)" do node = Node.create(ssid: "test1", mac: 0, signal: 100) post "/api/nodes/", node: { ssid: "test1", mac: 0, s
it "tries to add an existing node (same mac address but better signal)" do
node = Node.create(ssid: "test1", mac: 0, signal: 100)
post "/api/nodes/", node: { ssid: "test1", mac: 0, signal: 50 }, format: :json
end
我在“mac”字段中得到了一个关于节点是重复节点的错误,但是我在控制器中检查了这个错误,以确保它不会发生
def create
@node = Node.find_by(mac: params[:mac]) #This checks for duplicates but doesnt seem to work
if @node.nil?
@node = Node.new(node_params)
if @node.save #somehow its getting to here but the save is failing
render :show, status: :created #because there is a duplicate
end
else
这似乎只是在单元测试中发生的,通过一个真实的单词测试它可以工作。您的
params[:mac]
是nil
post "/api/nodes/", node: { ssid: "test1", mac: 0, signal: 50 }, format: :json
此行发送params[:node][:ssid]
、params[:node][:mac]
和params[:node][:signal]
,因此您应该将操作更改为:
def create
@node = Node.find_by(mac: params[:node][:mac])
if @node.nil?
@node = Node.new(node_params)
if @node.save
render :show, status: :created
end
else
PS:我假设你有这个方法:
def node_params
params.require(:node).permit(:ssid, :mac, signal)
end
如果是:
def node_params
params.permit(:ssid, :mac, signal)
end
那么在发布时,您不应该将它们包装在节点:
中:
post "/api/nodes/", ssid: "test1", mac: 0, signal: 50, format: :json
及
将起作用另一个问题是信号:当它到达我的控制器时似乎是一个字符串,但在我的android应用程序中它仍然是一个整数。这是故意的吗?@dmateos这是不同的问题,但看看这里:
@node = Node.find_by(mac: params[:mac])