Как настроить сервис ember-intl в интеграционных тестах Ember? - PullRequest
0 голосов
/ 29 мая 2018

Я только начал добавлять ember-intl в приложение, для которого у меня были рабочие тесты.Мои приемочные тесты все еще работают, но мои интеграционные тесты на компонентах, шаблоны которых используют ember-intl для перевода строк, не выполняются с:

"Не определен языковой стандарт. Невозможно разрешить перевод: ..."

В документах ember-intl есть раздел по интеграционному тестированию , который, кажется, устарел:

import hbs from 'htmlbars-inline-precompile';
import wait from 'ember-test-helpers/wait';
import { moduleForComponent, test } from 'ember-qunit';

let service;

moduleForComponent('x-product', 'XProductComponent', {
  integration: true,
  setup() {
    service = this.container.lookup('service:intl');
    service.setLocale('en-us');
  }
});

test('it renders', function(assert) {
  assert.expect(1);
  this.render(hbs`{{x-product price=price deadline=deadline}}`);
  this.set('price', 1000);
  this.set('deadline', new Date());
  let output = this.$().text();
  assert.ok(output);
});

test('it translates', function(assert) {
  assert.expect(1);

  /* waits for async behavior (loading translations on app boot) to settle */
  return wait().then(() => {
    assert.equal(service.t('some.key'), 'Hello world');
  });
});

Я смотрел в документах Ember и я может узнать, как поставить службу на проверку для , а не просто загрузить службу в тесте и затем работать с ней.

1 Ответ

0 голосов
/ 29 мая 2018

Вместо использования this.container нам теперь нужно использовать this.owner в тестах нового формата.Вот фрагмент кода, показывающий, как использовать его в контексте:

import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { find, render } from '@ember/test-helpers';
import hbs from 'htmlbars-inline-precompile';


module('Integration | Component | login-form', function(hooks) {
  setupRenderingTest(hooks);

  let service;

  hooks.beforeEach(function() {
     service = this.owner.lookup('service:intl');
     service.setLocale('en-us');
  });

  test('it renders', async function(assert) {
    await render(hbs`{{login-form}}`);

    assert.equal(find('[data-test-login-title]').textContent.trim(), 'Login');
  });
});

PR был отправлен на ember-intl, так что, надеюсь, документы скоро отразят последнюю лучшую практику.

...