我的React Native应用程序希望在用户打开应用程序时将其本地数据与API同步.这应该在用户返回应用程序时发生,而不仅仅是在第一次启动时.基本上,我想要的是相当于AppDelegate的applicationDidBecomeActive回调,以便我可以在那里运行同步代码.显然,我想在React Native中这样做.
据我所知,root组件上的componentWillMount/ componentDidMount回调仅在最初加载应用程序时运行,而不是在用户离开应用程序并稍后返回(未明确退出应用程序)之后运行.
我认为AppStateAPI将提供此功能,但它的change侦听器也不会在这种情况下触发.
这似乎是明显的功能,所以我必须错过一些明显的东西.救命!
我有一个javascript自动完成插件,它使用以下类(用coffeescript编写):Query,Suggestion,SuggestionCollection和Autocomplete.这些类中的每一个都有一个用Jasmine编写的相关规范.
插件在模块中定义,例如:
(function(){
// plugin...
}).call(this);
Run Code Online (Sandbox Code Playgroud)
这可以防止类污染全局命名空间,但也可以将它们隐藏在任何测试中(使用jasmine进行规范,或使用类似q-unit的单元测试).
在不污染全局命名空间的情况下,公开javascript类或对象进行测试的最佳方法是什么?
我会回答我提出的解决方案,但我希望有一些更标准的东西.
更新:我尝试的解决方案
因为我是一个<100 xp的新手,我无法回答8个小时的问题.而不是等待我只是添加我在这里做的.
为了规范这些类,我发明了一个名为的全局对象_test,我公开了所有类以进行测试.例如,在coffeescript中:
class Query
// ...
class Suggestion
// ...
// Use the classes
// Expose the classes for testing
window._test = {
Query: Query
Suggestion: Suggestion
}
Run Code Online (Sandbox Code Playgroud)
在我的规范中,我可以透露我正在测试的类:
Query = window._test.Query
describe 'Query', ->
// ...
Run Code Online (Sandbox Code Playgroud)
这样做的好处是只有_test对象被污染,并且它不太可能与该对象的另一个定义发生冲突.尽管如此,它仍然没有我想要的那么干净.我希望有人能提供更好的解决方案.
我已经.thor按照我喜欢的方式创建了一个用于设置新ruby项目的脚本.我正在使用Thor :: Actions directory命令完全从模板目录结构构建应用程序,而不是使用heredocs内联定义它们.脚本目录看起来像这样:
rubynu.thor
template/
bin/
lib/
%app_name%.rb.tt
%app_name%
README.markdown
.gitignore
...
Run Code Online (Sandbox Code Playgroud)
这非常有用,让我可以随着口味的变化轻松地想象和更改模板的各个部分.
但是,一旦.thor文件系统安装使用,我无法找到一个很好的方法来找到模板目录thor install rubynu.thor.安装将.thor文件的副本~/.thor粘贴到但忽略template/目录,因此不再找到模板.
我不想硬编码source_root路径或手动复制模板目录~/.thor.是否内置了一些内容来处理安装模板和.thor文件?如果它们在安装时可以打包在一起会很棒.
如果没有,最好的解决方法是什么?当然,在某处使用模板文件的系统安装了thor任务.你过得怎么样?我想我可以绕过thor install并提供这个作为一个宝石(虽然这看起来有点矫枉过正),或咬住子弹并将所有模板定义内联在一个巨大的.thor文件中(以后对结构进行更改不太令人愉快).
作为参考,这是.thor我正在使用的简单文件:
class Rubynu < Thor::Group
include Thor::Actions
argument :app_name
def self.source_root
File.dirname(__FILE__)
end
def apply_directory_template
directory 'template', app_name
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢!
ruby ×2
coffeescript ×1
jasmine ×1
javascript ×1
react-native ×1
testing ×1
thor ×1
unit-testing ×1