Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js动态路由不在测试中解析,但在生产中工作_Ember.js_Ember Cli_Ember Qunit - Fatal编程技术网

Ember.js动态路由不在测试中解析,但在生产中工作

Ember.js动态路由不在测试中解析,但在生产中工作,ember.js,ember-cli,ember-qunit,Ember.js,Ember Cli,Ember Qunit,因此,我尝试使用Twitter风格的URL语法,允许用户进入example.com/quaunaut访问用户名为“quaunaut”的用户页面。我能够通过以下方式实现这一点: app/router.js export default Router.map(function() { this.route('users.show', { path: '/:user_username' }); }); export default Ember.Route.extend({ model: fu

因此,我尝试使用Twitter风格的URL语法,允许用户进入
example.com/quaunaut
访问用户名为“quaunaut”的用户页面。我能够通过以下方式实现这一点:

app/router.js

export default Router.map(function() {
  this.route('users.show', { path: '/:user_username' });
});
export default Ember.Route.extend({
  model: function(params) {
    return this.store.find('user', { username: params.user_username }).then(function(result) {
      return result.get('firstObject');
    });
  },

  serialize: function(model) {
    return { user_username: model.get('username') };
  }
});
app/routes/users/show.js

export default Router.map(function() {
  this.route('users.show', { path: '/:user_username' });
});
export default Ember.Route.extend({
  model: function(params) {
    return this.store.find('user', { username: params.user_username }).then(function(result) {
      return result.get('firstObject');
    });
  },

  serialize: function(model) {
    return { user_username: model.get('username') };
  }
});
现在,当通过
ember s
进行直播或运行时,这项功能的效果非常好。然而,在测试中,似乎出于某种原因无法解决

var application, server, USERS;
USERS = {
  'example1': [{
    id: 1,
    username: 'example1'
  }],
  'example2': [{
    id: 2,
    username: 'example2'
  }]
};

module('Acceptance: UsersShow', {
  beforeEach: function() {
    application = startApp();

    server = new Pretender(function() {
      this.get('/api/users', function(request) {
        return [
          201,
          { 'content-type': 'application/javascript' },
          JSON.stringify(USERS[request.queryParams.username])
        ];
      });
    });
  },

  afterEach: function() {
    Ember.run(application, 'destroy');
    server.shutdown();
  }
});

test('visiting users.show route', function(assert) {
  visit('/example1');

  andThen(function() {
    assert.equal(currentPath(), 'users.show');
    assert.equal(find('#username').text(), 'example1');
  });
});
这将导致以下测试结果:

Acceptance: UsersShow: visiting users.show route
    ✘ failed
         expected users.show
    ✘ failed
         expected example1

那么,你知道为什么
currentPath()
无法解析吗?如果您还对如何更好地实现我在这里所要做的事情有任何建议,我当然愿意接受。

您的
访问
语法不太正确,应该是:

test('visiting users.show route', function(assert) {
  visit('/example1').then(function() {
    assert.equal(currentPath(), 'users.show');
    assert.equal(find('#username').text(), 'example1');
  });
});

然后简单地等待所有承诺(与特定承诺相反)完成。您的方法仍然以
currentPath()
未定义而告终,因此我不认为是这样。您的
storeConfigInMeta
的值是多少?