我今天开始为我的rails应用程序编写功能测试.我使用RESTful身份验证插件.我遇到了一些令人困惑的事情,我希望有人可以为我澄清.
1)我写了一个快速登录功能,因为我的rails应用程序中的大多数功能都需要身份验证.
def login_as(user)
@request.session[:user_id] = user ? user.id : nil
end
Run Code Online (Sandbox Code Playgroud)
我看到这个函数的问题,它基本上是伪造的身份验证.我应该担心吗?也许只要我在某处测试真正的身份验证方法就可以走这条路.或者这可能是一种糟糕的做法.
2)第二个令人困惑的事情是,在我的功能测试的某些地方,我需要完整的身份验证过程.当用户被激活时,我有do_activate方法为用户创建一些初始对象.它类似于为学生应用程序创建空白笔记本对象和笔对象,如果这是有意义的.
因此,为了正确测试我的应用程序,我需要用户点击该激活状态,以便创建这些对象.我目前正在使用Factory Girl创建用户,然后调用上面的login_as函数来伪造身份验证.
我想另一个选择是跳过完整的身份验证序列,然后用Factory Girl创建空白对象.我可以在其他地方测试正确的身份验证.
你怎么看?如果我应该通过正确的序列,为什么下面的代码不是调用do_activate函数?
user = Factory.create(:user)
user.active = 1
user.save
Run Code Online (Sandbox Code Playgroud)
谢谢!
testing ruby-on-rails restful-authentication functional-testing
Minitest的规范库很棒.我已经能够在Rails单元测试中使用它没问题.但是,Rails功能测试继承自ActionController :: TestCase,它在其设置中提供了像@controller这样的实例变量.
有没有人使用Minitest :: Spec lib进行Rails功能测试?
如果没有,我正在考虑创建一个小型库来做到这一点.我对rspec并不太热衷,并且应该开始将它的重点转移到rspec上.拥有一些轻量级的东西并且基于已经提供的工具构建它会很不错.
在iPad/iPhone上运行功能测试似乎没有太多选择.快速搜索带来了一些选择:FoneMonkey,Frank,UI Automation.
有没有人有这方面的经验或有更好的解决方案的建议?
测试一个元素是否可以使用量角器进行测试是微不足道的,但是我一直在试图弄清楚如何检查一个元素是否无法点击.
我试图将click函数包装在try/catch中,以便在尝试单击它时抛出错误时应该捕获它并让测试通过; 但是,这不起作用.
这是我执行检查的方法的代码:
return this.shouldSeeDisabledFunds()
.then(function() {
var clickable = true;
try {
fundsElem.first().click();
} catch (e) {
clickable = false;
console.log(clickable);
} finally {
console.log(clickable);
}
console.log(clickable);
// All the way through, clickable is still true, and the console log in the
// catch is not called. I believe this is because click is asynchronous.
})
;
Run Code Online (Sandbox Code Playgroud) 与我之前的问题相反,我会尝试提出我的要求.
我试图找到一些符合以下条件的框架/方法/"东西":
我的第一次尝试是使用NUnit测试来驱动Selenium(以及之前的Watin),但我在使用TransactionScope回滚Selenium驱动的浏览器在数据库中所做的更改时遇到了一些问题(请查看上面的链接).
有没有人在"现实世界"中做过这样的事情?我通过谷歌找到了一些参考文献,但未能找到有关如何实现这一点的具体例子.如果我正在进行单元测试,那就不会有任何问题.在那种情况下,TransactionScope就足够了.
编辑: R.Harvey向我指出了这个问题,这几乎与我的情况相同.
不过这个问题仅仅是几乎相同的.我的应用程序是一系列服务的一部分,所有这些服务都访问同一组数据库表.所需的测试数据量不允许有效使用drop/create-scripts,因此是否有其他替代解决方案?
我们正在使用SQL Server 2005,而且我对数据库魔术并不十分精通,所以如果有一些方法可以使用除drop/create之外的sql脚本,那么这可能是一个选项.
编辑2:
基于答案和一些额外的头脑,我们将为开发人员提供更轻量级的数据库,以执行单元,集成和功能测试.这使我们能够使用sql脚本来设置和拆除测试.
database asp.net integration-testing automated-tests functional-testing
我有一个rails控制器,在这里定义:
https://github.com/abonec/Simple-Store/blob/master/app/controllers/carts_controller.rb
在购物车页面上,用户可以通过发布嵌套属性来指定line_items的数量.参数如下所示:
{ "cart" => {
"line_items_attributes" => {
"0" => {
"quantity" => "2",
"id" => "36" } } },
"commit" => "Update Cart",
"authenticity_token" => "UdtQ+lchSKaHHkN2E1bEX00KcdGIekGjzGKgKfH05So=",
"utf8"=>"\342\234\223" }
Run Code Online (Sandbox Code Playgroud)
在我的控制器动作中,这些参数保存如下:
@cart.update_attributes(params[:cart])
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在测试中测试这种行为.@cart.attributes仅生成模型属性而不是嵌套属性.
我该如何测试这种行为?如何在我的功能测试中使用嵌套属性模拟post请求?
我有一个应用程序.应用程序中有一个按钮,如果单击该按钮,将退出应用程序.我正在使用UIAutomation仪器测试应用程序.我想测试这个按钮.但是在应用程序退出后,仪器会停止发出异常.我想要做的是,在应用程序存在之后,我想重新打开应用程序并继续进行剩下的测试.有没有其他人在同一场景?如果是这样,如果您找到了解决方案,请与他人分享解决方案吗?
我在Django框架中制定了测试用例.
使用案例:我使用的API通过向用户发送电子邮件来注册用户,当他们点击电子邮件中提供的链接时,他们的帐户就会被激活.
在我的settings.py我正在使用
EMAIL_FILE_PATH ='django.core.mail.backends.filebased.EmailBackend'
Run Code Online (Sandbox Code Playgroud)
它指向本地目录.
从eclipse运行PyUnit测试用例时,所有工作文件.为每个发送的电子邮件生成文本文件
但是,当我使用时
python ./manage.py test <component_name>
Run Code Online (Sandbox Code Playgroud)
文件不会生成.
任何见解当我执行测试用例./manage.py和使用时有什么区别pyUnit?
python django automated-tests unit-testing functional-testing
我不确定如何通过功能测试检查flash消息.我的问题与redirect_to我的flash[:error]DOES 测试通过有关.这是我的create行为:
def create
@user = User.new(params[:user])
if @user.save
redirect_to @user, flash: { success: "Welcome!" }
else
flash.now[:error] = "Signup failed:"
render 'new'
end
end
Run Code Online (Sandbox Code Playgroud)
我有一个通过测试flash[:error]1)检查flash[:error]是正确的值,2)检查页面的flash div,3)获取一个新页面并检查闪存消息是否已被清除.我尝试进行类似的测试,flash[:success]但是当它试图在页面上找到div时失败了.这是失败的测试:
should "show flash[:success] message" do
post :create, user: { name: "valid user",
password: "userpw",
password_confirmation: "userpw",
email: "a@b.com" }
assert_redirected_to user_path(assigns(:user)), "user isn't being redirected to their page after registration"
assert_equal flash[:success], "Welcome!", "flash[:success] isn't being set properly"
assert_select "div.alert-success", flash[:success] …Run Code Online (Sandbox Code Playgroud) 我现在正在进行功能测试,其中一个我必须测试没有显示吐司信息.考虑到这是我用来检查是否显示toast消息的代码(此代码有效):
onView(withText(R.string.my_toast_message))
.inRoot(withDecorView(not(getActivity().getWindow().getDecorView())))
.check(matches(isDisplayed()));
Run Code Online (Sandbox Code Playgroud)
下面你可以找到我用来检查没有显示吐司信息的代码(它们都不起作用):
方法一:
onView(withText(R.string.error_invalid_login))
.inRoot(withDecorView(not(getActivity().getWindow().getDecorView())))
.check(matches(not(isDisplayed())));
Run Code Online (Sandbox Code Playgroud)
方法二:
onView(withText(R.string.error_invalid_login))
.inRoot(withDecorView(not(getActivity().getWindow().getDecorView())))
.check(doesNotExist());
Run Code Online (Sandbox Code Playgroud)
任何关于如何检查未显示吐司信息的想法都会非常感激:)
testing ×5
android ×1
asp.net ×1
database ×1
django ×1
ios ×1
ipad ×1
iphone ×1
javascript ×1
minitest ×1
node.js ×1
protractor ×1
python ×1
redirect ×1
unit-testing ×1