我是RSpec的新手,我无法找到如何测试以下内容:
在我的应用程序控制器(在Rails 3应用程序中)中,我将语言环境设置在之前的过滤器中,就像这样
def set_locale
I18n.locale = ["en", Setting.locale, get_locale_from_subdomain].compact.last
end
def get_locale_from_subdomain
locale = request.subdomain.split('.').first
return nil unless LOCALES.include? locale
locale
end
Run Code Online (Sandbox Code Playgroud)
所以基本上,"en.example.com"和"example.com"将具有"en"语言环境,而"fr.example.com"将语言环境设置为"fr".
我该怎么测试呢?
我正在尝试捕获Backbone.Marionette.CompositeView中的滚动事件,但没有成功.
作为练习,我使用Backbone.Marionette 重写http://www.atinux.fr/backbone-books/.如您所见,当您向下滚动时,会获取并显示更多书籍(即无限滚动).但是,我无法在我的视图中捕获滚动事件.
这是我的(简化)代码:
LibraryView = Backbone.Marionette.CompositeView.extend({
// properties, initializer, etc.
events: {
'scroll': 'loadMoreBooks',
'click': 'loadMoreBooks'
},
// some functions
loadMoreBooks: function(){
console.log("loadMoreBooks");
}
});
Run Code Online (Sandbox Code Playgroud)
完整的源代码可以在这里看到:https://github.com/davidsulc/backbone.marionette-atinux-books/blob/scroll/assets/javascript/app.js#L86-89
我不明白的是,"点击"事件正在被正确触发,但"滚动"事件却没有.我究竟做错了什么?
编辑:所以错误最后很简单......我将"el:#content"传递给视图的构造函数,但滚动在CSS中定义为".library".一旦我改变了我的DOM
<div id="content">
<div class="library">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
至
<div id="content" class="library"></div>
Run Code Online (Sandbox Code Playgroud)
一切正常......
我刚刚开始使用JavaScript处理非平凡的事情,所以这可能很简单......
我想要完成的任务:迭代产品引用数组,为每个引用获取JSON,并返回所有产品信息的数组(具有通过引用索引的类似哈希的结构).
我尝试过的:
function fetchProductData(references){
var product_data = new Object();
references.forEach(function(ref){
$.ajax({
url: "http://localhost:3000/products/find.js?reference=" + ref,
dataType: "jsonp",
type: "GET",
processData: false,
contentType: "application/json",
success: function(data) {
product_data[ref] = data;
}
});
});
alert('before return: ' + product_data);
return product_data;
};
$(document).ready(function(){
var products = fetchProductData(references);
alert('products : ' + products);
});
Run Code Online (Sandbox Code Playgroud)
这是我不明白的:第一次调用alert显示数组内容时,数组为空.但是,在第二次调用时,数组将填充我想要的数据.
换句话说,"products:" alert在上面的代码中显示我想要的数据.但如果我评论"返回之前:" alert,它就不再这样做了.为什么是这样?
所以我的问题是:如何让jQuery进行多次$ .ajax调用来获取产品信息,在数组中收集该信息,然后返回该数组以便在代码中的其他地方使用它?
另外,为什么变量中的数据在被引用后可以神奇地访问alert?
ajax ×1
backbone.js ×1
elixir ×1
erlang ×1
javascript ×1
jquery ×1
marionette ×1
rspec ×1
rspec-rails ×1
rspec2 ×1