我想知道如何验证传递给控制器
中的渲染模板的局部变量控制器:
def lelf_panel
# ...
if some_condition
locals_hash = some_very_long_hash_A
else
locals_hash = some_very_long_hash_B
end
render :partial => "left_panel", :layout => false, :locals => locals_hash
end
当前规范:
it 'should render correct template for lelf_panel' do
# ...
get 'left_panel'
response.should render_template('system/_left_panel')
end
现在我需要为这个控制器完成Rcov,所以我需要添加/修改规范以涵盖'some_condition'结果。我想验证传递给渲染的'lelf_panel'本地,好像我只验证了render_template,为两个结果渲染的部分页面是相同的。
我检查了rspec docs中的'render_template' http://rubydoc.info/gems/rspec-rails/2.8.1/RSpec/Rails/Matchers/RenderTemplate:render_template
它只提供消息的第二个参数,所以如何测试传递给渲染的本地?
答案 0 :(得分:16)
您可以在控制器对象上使用期望值,而不是使用render_template
匹配器。
it 'should render correct template for lefl_panel' do
# ...
allow(controller).to receive(:render).with no_args
expect(controller).to receive(:render).with({
:partial => 'system/_left_panel',
:layout => false,
:locals => some_very_long_hash_A
})
get 'left_panel'
end
答案 1 :(得分:3)
@ ryan-ahearn的答案与来自@ user2490003评论的建议相同 - 但所有内容都更灵活,适用于RSpec 3。
<?php
include_once './connect_db.php';
$db= new DBConnect();
$response=array();
$title=$_POST["title"];
$description =$_POST["description"];
$image =$_POST["image"];
$username=$_POST["username"];
//get image id
$sql ="SELECT id FROM story ORDER BY id ASC";
$sql1="SELECT id,name FROM account WHERE username='$username'";
$res = mysqli_query($db->conn,$sql);
$user=mysqli_query($db->conn,$sql1);
while($rows =mysqli_fetch_array($user)){
$user_id=$rows[0];
$name =$rows["name"];
}
while($row = mysqli_fetch_array($res)){
$id = $row['id']+1;
}
if($id==null)
{
$id=1;
}
$path = "image_of_child/$id.png";
$actualpath = "http://www.achieversnepal.com/savechild/$path";
// mysql query
$sql = "INSERT INTO story(name,title,description,image) VALUES('$name','$title','$description','$actualpath')";
if(mysqli_query($db->conn,$sql)){
file_put_contents($path,base64_decode($image));
if(mysqli_query($db->conn,"INSERT INTO user_story(story_id,user_id) VALUES($id,$user_id)"))
{
}
$response["success"]=1;
$response["message"]="Story uploaded successfully!!!";
die(json_encode($response));
}
else{
$response["success"]=0;
$response["message"]="Error during upload!!";
die(json_encode($response));
}
答案 2 :(得分:1)
据我所知,没有办法以你描述的方式直接检查模板的本地人。
您可以将locals_hash更改为@locals_hash,然后通过分配(:locals_hash)检查结果。
或者,您可以在生成的HTML上使用选择器并检查是否存在某些指示性内容 - 例如,如果locals_hash影响页面标题,请检查生成的HTML页面标题是否符合您的预期。