我在使用AJAX登录设计时遇到问题.我正在使用:remote => true
javascript助手的选项和jQuery版本(https://github.com/rails/jquery-ujs).用户输入正确的信息后,会在会话视图中呈现我的create.js.erb.这没关系,因为我可以在这个文件中使用JS重定向我的用户.但是当发生错误时,例如用户输入错误信息时,只有闪存消息在响应中并带有错误代码401 - Unauthorized
.因此,不会呈现视图或create.js.erb或其他.但是我想通过在侧面显示它来处理这个消息,以便用户获得一些反馈,但是错误.
我还尝试用自己的自定义控制器实现respond_to :js
,并使用:recall
warden身份验证的方法.但它不起作用.
有没有人知道解决这个问题的一些最佳实践?或者我应该避免使用这种帮助方法,只使用纯jQuery进行ajax调用?
thx,tux
我正在寻找New Relic的开源替代品.我可以自己安装我的rails开发和生产应用程序,分析我的查询,渲染时间......有很多服务,其中大部分都有免费计划.但是我希望自己主持这个东西,安装它进行开发,以便在它投入生产之前分析我的应用程序.
有什么建议?
我目前正在使用我的AngularJS应用程序和Grunt中的E2E测试和Protractor.我按照https://www.npmjs.org/package/grunt-protractor-runner的安装,我有2个问题:
第一:
我想知道,如果有可能的话,我可以通过Karma的单元测试获得这种行为:
我非常喜欢实时监视和自动重新加载,因为它减少了整个套件的启动时间,并使一切变得更快.
但是使用Protractor,我遇到了一个问题:每次我用Grunt开始测试时,测试都会执行,然后一切都会关闭.虽然,我将keepAlive
选项设置为我true
的量角器配置部分Gruntfile.js
.有任何想法吗?
第二:
我无法让它工作,将Protractor连接到我的角度应用程序.我是否必须启动grunt服务器来提供文件?当我尝试在我的测试中访问某个页面时,browser.get('app/index.html');
或者browser.get('#/');
,我无法访问该页面.我玩过我的baseUrl
选项(比如baseUrl: 'http://localhost:' + (process.env.HTTP_PORT || '8000')
)protractor.conf.js
.但对我而言,我必须先启动grunt服务器,我是对的吗?我怎么能这样做?或者还有其他选项可以访问我的角度应用程序?我正在使用带指南针的萨斯,所以我想,我需要compass:dist
以某种方式获得这些目标.
更新:
我找到了一个解决方法.我注册了以下grunt任务:
grunt.registerTask('e2e', [
'clean:server',
'concurrent:test',
'autoprefixer',
'connect:test',
'concurrent:server',
'autoprefixer',
'protractor',
'watch'
]);
Run Code Online (Sandbox Code Playgroud)
当grunt e2e
我的服务器启动时,基于baseUrl: 'http://10.0.0.200:9001'
我的内部protractor.conf.js
,我的测试正在运行.测试完成后,watch
任务会监视已更改的文件,并在需要时重新运行量角器.
这样做的缺点是,每次watch
启动protractor
任务时,都会生成一个新的Chrome实例,并在测试结束后终止.有没有办法防止量角器杀死Chrome实例?
此外,我想知道为什么在每个教程中它总是说"只是运行grunt protractor
,你的测试被执行......".为什么我需要一个额外的任务来启动我的grunt服务器来访问我的angularjs应用程序?
这是我的配置文件:
protractor.conf.js
exports.config = {
capabilities: {
'browserName': 'chrome'
}, …
Run Code Online (Sandbox Code Playgroud) 我正在使用Karma和Jasmine进行测试.在某些测试中,我有大量的测试依赖的对象.当我做的事情
expect(obj).toEqual(expectedObj);
Run Code Online (Sandbox Code Playgroud)
并且obj != expectedObj
,我在终端中收到错误消息.但是这个错误确实很长,因为它包含了两个对象,并且很难看出这两个对象在哪些部分是不同的.
那么,终端是否有任何荧光笔,可以与业力一起使用?通过这种方式,可以更容易地弄清楚,出了什么问题.
我正在尝试Backbone.js和rails应用程序.我的问题是,我不知道如何使用我的rails应用程序实现Backbone控制器和视图.我已经阅读了很多教程,但他们总是在backbone.js中只使用一个控制器.
例如,我在轨道中有两个控制器.
而另一个是
在我的application.js中,我使用启动应用程序
var App = {
Views: {},
Controllers: {},
Collections: {},
init: function() {
new App.Controllers.Activities();
new App.Controllers.Users();
Backbone.history.start();
}
};
$(function() {
App.init();
});
Run Code Online (Sandbox Code Playgroud)
问题是,我不需要我的用户配置文件中的活动控制器和Rails活动控制器中的用户控制器.我该怎么解决这个问题?我应该尝试在javascript中读取当前的URL,然后决定使用哪个控制器吗?或者我应该将JavaScript文件放入application.html.erb然后决定应该使用哪个控制器?
或者这是使用backbone.js控制器的错误方法?
我对backbone.js的结构有点错误吗?或者我是以错误的方式使用控制器?
另一个问题是,如何通过Backbone.js添加小JavaScript,特别是jQuery功能?例如,当用户单击该字段时,我想删除字段内的标签.或者我想做一些标签功能,只是切换一些元素的可见性.我应该为每个使用javascript的元素创建一个Backbone视图吗?或者这是否过载?
希望我明确表示,任何人都可以提供帮助,谢谢!
我正在尝试测试一些视图,这些视图<a ui-sref='someState'>link</a>
用于链接到我的应用程序中的其他状态.在我的测试中,我触发了对这些元素的点击,如下所示:
element.find('a').click()
Run Code Online (Sandbox Code Playgroud)
如果状态切换到,我该如何测试someState
?$state
在我的控制器中使用时会很容易:
// in my view
<a ng-click="goTo('someState')">link</a>
// in my controller
$scope.goTo = function(s) {
$state.go(s)
};
// in my tests
spyOn($state, 'go');
element.find('a').click()
expect($state.go).toHaveBeenCalled()
Run Code Online (Sandbox Code Playgroud)
但是当我使用时,我ui-sref
不知道要窥探什么对象.如何验证我的应用程序处于正确的状态?
如何为super
通话设置块为零?
class A
def foo
if block_given?
result = yield
# do stuff with the yield result
end
# some more code
end
end
class B < A
def foo
block_result = yield
# process block results and store it
# ...
super
end
end
B.new.foo { puts "block called" }
# => block called
# => block called
Run Code Online (Sandbox Code Playgroud)
我不想两次屈服.是否有可能block_given?
在类中A
返回false?
背景是我不拥有A
该类,我不能改变它的foo
方法,但我想避免两次调用我的块.我也不想通过虚拟/空块超,因为行为A
的foo
时候给出一个块的方法改变.
我有一个自定义匹配器,在其匹配块中使用期望(此处的代码已简化)
RSpec::Matchers.define :have_foo_content do |expected|
match do |actual|
expect(actual).to contain_exactly(expected)
expect(actual.foo).to contain_exactly(expected.foo)
end
end
Run Code Online (Sandbox Code Playgroud)
通常错误消息看起来像这样
expected collection contained: ["VLPpzkjahD"]
actual collection contained: ["yBzPmoRnSK"]
the missing elements were: ["VLPpzkjahD"]
the extra elements were: ["yBzPmoRnSK"]
Run Code Online (Sandbox Code Playgroud)
但是当使用自定义匹配器时,它只打印此内容,并且重要的调试信息会丢失:
expected MyObject to have_foo_content "foobar"
Run Code Online (Sandbox Code Playgroud)
那么,是否可以重新使用匹配块中的错误消息作为失败消息?我知道我可以提供自定义失败消息
failure_message do |actual|
# ...
end
Run Code Online (Sandbox Code Playgroud)
但我不知道如何访问上述错误引发的失败消息。
有没有方便的方法来替换数组的内容,并保持对它的引用?我不想像这样替换数组:
var arr1 = [1,2,3];
var referenceToArr1 = arr1;
var arr2 = [4,5,6];
arr1 = arr2;
// logs: [4,5,6] false
console.log(arr1, arr1===referenceToArr1);
// logs [1,2,3]
console.log(referenceToArr1);
Run Code Online (Sandbox Code Playgroud)
这种方式arr1
有内容arr2
,但我放松了参考referenceToArr1
,因为它仍然指向原文 arr1
.
通过这种方式,我没有放弃参考:
var arr1 = [1,2,3];
var referenceToArr1 = arr1;
var arr2 = [4,5,6];
arr1.length = 0;
for (var i = 0; i < arr2.length; i++) {
arr1.push(arr2[i]);
}
// logs: [4,5,6] true
console.log(arr1, arr1===referenceToArr1);
// logs: [4,5,6]
console.log(referenceToArr1)
Run Code Online (Sandbox Code Playgroud)
这里的缺点是,我必须清空arr1.length = 0
,迭代每个元素arr2 …
第一:
我正在使用grape来构建我的API(Rails 4).当有人发送无效的JSON正文(例如忘记了最后一个}
)时,会出现以下错误:
ActionDispatch::ParamsParser::ParseError (795: unexpected token at '{"foobar": 1234
')
Run Code Online (Sandbox Code Playgroud)
我尝试用葡萄rescue_from :all
选项,但这不起作用.在堆栈跟踪中,我看不到涉及的葡萄宝石.似乎这个错误是从actionpack抛出的:
.gems/gems/actionpack-4.1.4/lib/action_dispatch/middleware/params_parser.rb:53:in `rescue in parse_formatted_parameters'
.gems/gems/actionpack-4.1.4/lib/action_dispatch/middleware/params_parser.rb:32:in `parse_formatted_parameters'
.gems/gems/actionpack-4.1.4/lib/action_dispatch/middleware/params_parser.rb:23:in `call'
Run Code Online (Sandbox Code Playgroud)
但是,捕获这些错误,返回400: Bad Request
错误以及unexpected token at '{"foobar": 1234
在json响应中包含消息的最佳方法是什么?
第二:
我尝试用RSpec测试这个,但是在发送带有无效JSON的原始请求时没有任何运气.我试过了
post "/my_route", '{some invalid json'
Run Code Online (Sandbox Code Playgroud)
但这不会从上面抛出错误.我认为自Rails 4以来,作为字符串传递的第二个参数被视为原始体?
javascript ×4
angularjs ×3
ruby ×3
jasmine ×2
rspec ×2
arrays ×1
backbone.js ×1
devise ×1
gruntjs ×1
jquery ×1
json ×1
karma-runner ×1
newrelic ×1
performance ×1
protractor ×1
ruby-grape ×1
testing ×1