我有一个使用Angular Translate的应用程序(https://github.com/PascalPrecht/angular-
translate
)。Translate在浏览器中的应用程序中工作得很好,但是当我尝试测试任何控制器时,我得到 错误:意外的请求:GET locale
/ locale-en.json
。由于在启动时会翻译GET请求以获得语言文件,因此如何对控制器进行单元测试?
我在Karma中使用yeeoman角度发生器。
App.js:
angular.module('myApp', ['ngCookies', 'ui.bootstrap', 'pascalprecht.translate'])
.config(function ($routeProvider, $locationProvider, $translateProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.otherwise({
redirectTo: '/'
});
$translateProvider.useStaticFilesLoader({
prefix: 'locale/locale-',
suffix: '.json'
});
$translateProvider.uses('en');
$translateProvider.useLocalStorage();
});
控制器测试:
describe('Controller: DocumentationCtrl', function () {
// load the controller's module
beforeEach(module('myApp'));
var DocumentationCtrl,
scope,
$httpBackend;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope, $injector) {
$httpBackend = $injector.get('$httpBackend');
scope = $rootScope.$new();
DocumentationCtrl = $controller('DocumentationCtrl', {
$scope: scope
});
}));
it('should attach a list of awesomeThings to the scope', function () {
$httpBackend.whenGET('locale/locale-en.json').respond(200, {
"TITLE": 'My App'
});
expect(scope.awesomeThings.length).toBe(3);
});
});
文档控制器只是一个标准生成的控制器。
您必须在配置阶段而不是运行阶段中指定首选语言。如此$translate.uses('us')
成为$translateProvider.preferredLanguage('us')
。同样适用useLocalStorage()
。这些都是配置$translate
服务的方法。
您还应该尝试避免uses()
设置默认语言。使用preferredLanguage()
代替。原因是,$translate.uses()
尝试尽快加载i18n文件,如果存在使用其他语言密钥的cookie或类似uses()
文件,则将加载两个文件,这就是我们引入的原因preferredLanguage()
,是的,这应该可以解决问题。
我正在从Spring Boot 1.5.21迁移到2.2.5,在此过程中也从Spring Boot云版本Edgware迁移。SR6到Hoxton。SR3。这一举动迫使我放弃了侦探自己的跟踪/跨度模型实现,并接受了勇敢的新模型。但是,我的控制器集成测试有问题。 我有一个名为Edge的微服务,其中有一个名为EdgeApplication的主类,我使用Spock作为测试框架。我的代码包括以下测试类: 之
问题内容: 我想延迟控制器的初始化,直到从服务器收到必要的数据为止。 我找到了针对Angular1.0.1的解决方案:延迟AngularJS路由更改,直到加载模型以防止闪烁,但无法使其与Angular1.1.0一起使用 模板 JavaScript http://jsfiddle.net/dTJ9N/1/ 问题答案: 由于$ http返回了promise,因此创建自己的deferred仅在htt
问题内容: 如果您有一个控制器来操作Angular.js中的$ scope变量,是否有惯用的方法: 重置控制器的$ scope,然后 重新启动控制器初始化? 对于复杂的控制器,不必将每个变量都重置为其初始值将非常方便,特别是如果您真正想要的是对控制器和范围进行简单的重新初始化。通过再次导航到相同的URL 并没有帮助。 编辑:假设我不能使用任何黑客工具,因为这会违反Chrome打包应用中的CSP。
我有一个例子,我有一个注释类,它创建一个bean并调用一些代码。我已经启用了急切的单例初始化,并且调用了bean工厂方法,即使在应用程序启动时它没有在任何地方使用。但是,对于测试,即时初始化不起作用,并且不创建bean: 应用程序: 配置 以及测试: 因此,在执行测试时,不会调用来自类的方法,即使启用了,并且它在应用程序正常启动时工作。 问题是:如何为micronaut测试启用热切的单例初始化?
问题内容: 我有一个AngularJs应用程序,我想在其中一开始就加载消息和应用程序版本,并将它们保存在本地存储中,然后再在控制器中使用它们。我现在所拥有的是每个控制器中的服务调用(目前为三个): 我只想获取一次应用程序版本并将其存储在此处。我不必每次都检查版本,对(如果新版本中添加了新消息)? 我发现使用$routeProvider的建议,但我的应用程序不是SPA。所以我需要其他想法/建议。对你
我想从我的控制器类中处理阶段事件(即隐藏)。所以我所要做的就是添加一个这样的侦听器: 但问题是初始化在该代码之后立即开始: 在此代码之前: 因此,getScene返回null。 我自己找到的唯一解决方法是将侦听器添加到,当它变得不为空时,我得到场景,将我最终检索阶段的侦听器处理添加到它的中。这一切都以将所需的侦听器设置为阶段事件而结束。 我觉得听众太多了。 这是解决我问题的唯一方法吗?