Jasmine测试没有检测到jQuery国际化常量

时间:2017-09-20 16:52:32

标签: javascript jquery internationalization jasmine

问题:我遇到一个问题,我尝试从.properties文件中读取常量,但其变量不会在it单位的范围内定义试验。执行以下测试将打印1 Hello World!,但不打印2 Hello World!。 Jasmine说MY_CONSTANT未在print something单元测试中定义,但是在callback调用jQuery.i18n.properties(...)中定义了messages.properties

似乎正在发生的事情:问题似乎是beforeAll(...)中的常量在单元测试后的console.log(...) 中设置跑了。我在1 Hello World! jQuery.i18n.properties(...)函数中的callback之前打印出单位测试打印beforeAll(...)。如何强制测试等待describe('Test for buttons and output in home page.', function() { beforeAll(function() { jQuery.i18n.properties({ name : 'Messages', path : 'src/main/resources/bundle/', mode : 'both', language : 'en_US', async : true, callback: function() { console.log('1 ' + MY_CONSTANT); } }); }); beforeEach(function() { jasmine.getFixtures().fixturesPath = 'src/test/javascript/fixture'; loadFixtures('myFixture.html'); $.holdReady(false); }); it('print something.', function(){ console.log('2 ' + MY_CONSTANT); }); }); 中的异步调用先完成?

简化的Jasmine测试文件(src / test / javascript / mySpec.js):

MY_CONSTANT=Hello World!

简化的属性文件(src / main / resources / bundle / messages.properties):

mvn jasmine:bdd

P.S。这是一个使用Java和jQuery的项目。 Jasmine单元测试目前纯粹使用jQuery和Javascript运行。我也在使用带有jQuery.i18n.properties的maven运行测试。

更多信息

主目录中还有一个文件也调用src/main/resources/assets/internationalization.js$(document).ready(function() { jQuery.i18n.properties({ name: 'Messages', path: 'bundle/', mode: 'both', language: 'en_US', async: true, callback: function() { initializeText(); } }); }); ,使用以下代码调用:

initializeText()

MY_CONSTANT基本上是一个函数,它通过将属性与HTML id相关联来设置一些必要的显示文本,但它没有设置class TaskSerializer(serializers.ModelSerializer): id = serializers.ReadOnlyField() count_assigned = serializers.SerializerMethodField() count_completed = serializers.SerializerMethodField() class Meta: model = Task fields = ('id', 'label', 'count_assigned', 'count_completed') def get_count_assigned(self, obj): return obj.assignees.count() def get_count_completed(self, obj): return obj.assignees.exclude(completed__isnull=True).count() 所以代码无关紧要。我发布这个可能很重要的机会。

1 个答案:

答案 0 :(得分:0)

问题是我设置了async: true。当我删除async: true时,测试通过了:

beforeAll(function() {
  jQuery.i18n.properties({
    name : 'Messages',
    path : 'src/main/resources/bundle/',
    mode : 'both',
    language : 'en_US',
    callback: function() {
      console.log('1 ' + MY_CONSTANT);
    }
  });
});

文档实际上是在github存储库自述文件中: https://github.com/jquery-i18n-properties/jquery-i18n-properties