Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 尝试添加重复节点时Rails rspec测试失败_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

Ruby on rails 尝试添加重复节点时Rails rspec测试失败

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

我正在使用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, 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])