我打算在我的项目中的请求和响应中使用JSON数据,并在测试中遇到一些问题.
搜索一段时间后,我找到以下curl用于发布JSON数据的代码:
curl -H "Content-Type:application/json" -H "Accept:application/json" \
-d '{ "foo" : "bar" }' localhost:3000/api/new
Run Code Online (Sandbox Code Playgroud)
在控制器中,我可以使用简单的方法访问JSON数据params[:foo].但对于功能测试,我只找到post和xhr(别名xml_http_request).
如何在rails中编写功能测试以达到与使用相同的效果curl?或者我应该以其他方式进行测试?
这是我尝试过的.我找到了xhrin 的实现action_controller/test_case.rb,并尝试添加jhr方法只需更改'Conetent-Type'和'HTTP_ACCEPT'.(已添加test/test_helpers.rb)
def json_http_request(request_method, action, parameters = nil, session = nil, flash = nil)
@request.env['Content-Type'] = 'Application/json'
@request.env['HTTP_ACCEPT'] ||= [Mime::JSON, Mime::JS, Mime::HTML, Mime::XML, 'text/xml', Mime::ALL].join(', ')
__send__(request_method, action, parameters, session, flash).tap do
@request.env.delete 'Content-Type'
@request.env.delete 'HTTP_ACCEPT'
end
end
alias jhr :json_http_request
Run Code Online (Sandbox Code Playgroud)
我以同样的方式使用xhr …
在Symfony2文档中,它提供了一个简单的示例:
$client->request('POST', '/submit', array('name' => 'Fabien'), array('photo' => '/path/to/photo'));
Run Code Online (Sandbox Code Playgroud)
模拟文件上传.
但是在我的所有测试中,我在应用程序中的$ request对象中没有得到任何内容,并且$_FILES数组中没有任何内容.
这是一个简单WebTestCase的失败.它是自包含的,并$client根据您传入的参数测试构造的请求.它不测试应用程序.
class UploadTest extends WebTestCase {
public function testNewPhotos() {
$client = $this->createClient();
$client->request(
'POST',
'/submit',
array('name' => 'Fabien'),
array('photo' => __FILE__)
);
$this->assertEquals(1, count($client->getRequest()->files->all()));
}
}
Run Code Online (Sandbox Code Playgroud)
只是为了清楚.这不是关于如何进行文件上传的问题,我可以做.它是关于如何在Symfony2中测试它们.
编辑
我确信我做得对.所以我已经为Framework创建了一个测试并发出了拉取请求. https://github.com/symfony/symfony/pull/1891
phpunit integration-testing file-upload functional-testing symfony
我在使用shoulda测试设计时遇到了一些困难:
2) Error:
test: handle :index logged as admin should redirect to Daily page.
(Admin::DailyClosesControllerTest):
NoMethodError: undefined method `env' for nil:NilClass
devise (1.0.6) [v] lib/devise/test_helpers.rb:52:in
`setup_controller_for_warden'
Run Code Online (Sandbox Code Playgroud)
我在test_helper中有这个:
include Devise::TestHelpers
Run Code Online (Sandbox Code Playgroud)
想法?提前致谢,
克里斯提
我正在针对存在于几个不同市场的网站产品运行RSpec测试.每个市场都有微妙的不同功能组合等.我希望能够编写测试,以便他们在运行时跳过自己,具体取决于他们所针对的市场/环境.在不同的市场上运行时,测试不应该失败,也不应该通过 - 它们根本不适用.
不幸的是,似乎没有一种简单的方法可以将测试标记为跳过.如果不尝试注入"待定"块(不管怎样都不准确?),我该如何做到这一点?
我喜欢在Python解释器中测试函数.当我想看到的不仅仅是返回值和副作用时,是否可以在Python解释器中调试函数?
如果是这样,你能展示基本的调试器操作(启动带参数的函数,设置断点,下一步,步入,观察变量)?如果没有,你会如何以另一种方式调试函数?
关键是,我想只调试一个将提供参数的特定函数.我不想调试整个模块代码.
谢谢你的建议
如何在API中再次运行webtestcase?有关功能测试的默认指南仅提供以下命令:
$client = static::createClient();
$crawler = $client->request('GET', '/some-url');
Run Code Online (Sandbox Code Playgroud)
Crawler类是一个DOM爬虫.我检查了FrameworkBundle\Client类的引用,但是找不到允许我发出返回原始Response的请求的方法.至少这样,我将能够json_decode输出并进行我的测试.
我可以用什么来实现这个目标?
我是使用Pytest测试Python的新手,我遇到了一个小而烦人的挂机.在命令行测试会话结果中,我看到我的测试通过,但显示的百分比不是100%.通过一些激进的日志记录,我能够确认我的测试正在按预期传递 - 那么显示的百分比是什么信息?
示例测试会话输出:
platform win32 -- Python 3.7.0a4, pytest-3.5.0, py-1.5.3, pluggy-0.6.0
rootdir: C:\api-check, inifile:
collected 5 items
test_Me.py ... [ 60%]
test_env.py .. [100%]
========================== 5 passed in 6.04 seconds ===========================
Run Code Online (Sandbox Code Playgroud) 我想编写以中等信任方式运行的自动化测试,如果需要完全信任,则会失败.
我正在编写一个库,其中某些功能仅在完全信任的情况下可用,并且我想验证我希望以中等信任运行的代码将正常工作.如果还想知道如果我改变一个需要完全信任的类,我的测试将失败.
我已经尝试创建另一个AppDomain并加载中等信任PolicyLevel,但我总是得到程序集错误或在尝试运行交叉AppDomain回调时无法加载其依赖项.
有没有办法解决这个问题?
更新:基于回复,这是我的.请注意,正在测试的类必须扩展MarshalByRefObject.这是非常有限的,但我没有看到解决方法.
using System;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using Xunit;
namespace PartialTrustTest
{
[Serializable]
public class ClassUnderTest : MarshalByRefObject
{
public void PartialTrustSuccess()
{
Console.WriteLine( "partial trust success #1" );
}
public void PartialTrustFailure()
{
FieldInfo fi = typeof (Int32).GetField( "m_value", BindingFlags.Instance | BindingFlags.NonPublic );
object value = fi.GetValue( 1 );
Console.WriteLine( "value: {0}", value );
}
}
public class Test
{
[Fact]
public void MediumTrustWithExternalClass()
{
// ClassUnderTest must extend MarshalByRefObject
var classUnderTest …Run Code Online (Sandbox Code Playgroud) c# automated-tests medium-trust full-trust functional-testing
我有分析瘫痪,查看新grails(v1.3.4)应用程序的所有不同功能测试选项.我看了看
而且必须有其他人.我认为我将用于做出决定的一些标准包括(没有特别的顺序):
我会特别感兴趣的是那些试过多个框架的人.谢谢!
我已经在RoR开发了一年多了,但我刚刚开始使用RSpec进行测试.
对于标准模型/控制器测试,我通常没有任何问题,但问题是我想测试一些复杂的功能过程,并且不知道如何构建我的测试文件夹/文件/数据库.
这是我的应用程序的基本结构:
class Customer
has_one :wallet
has_many :orders
has_many :invoices, through: :orders
has_many :invoice_summaries
end
class Wallet
belongs_to :customer
end
class Order
has_one :invoice
belongs_to :customer
end
class Invoice
belongs_to :order
belongs_to :invoice_summary
end
class InvoiceSummary
belongs_to :customer
has_many :invoices
end
Run Code Online (Sandbox Code Playgroud)
主要问题是我想模拟我的对象的生命周期,这意味着:
实例化将用于所有测试的客户和钱包(无需重新初始化)
模拟时间流,创建和更新多个订单/发票对象和一些invoice_summaries.
对于订单/发票/ invoice_summaries的创建和更新,我想有类似的方法
def create_order_1
# code specific to create my first order, return the created order
end
def create_order_2
# code specific to create my second order, return the created order
end
.
.
. …Run Code Online (Sandbox Code Playgroud) testing ×3
json ×2
python ×2
rspec ×2
symfony ×2
c# ×1
debugging ×1
devise ×1
file-upload ×1
full-trust ×1
function ×1
grails ×1
groovy ×1
interpreter ×1
medium-trust ×1
phpunit ×1
pytest ×1
rspec-rails ×1
rspec2 ×1
ruby ×1
shoulda ×1