Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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
Javascript 单元测试ember并发任务和产量_Javascript_Unit Testing_Ember.js_Ember Testing_Ember Concurrency - Fatal编程技术网

Javascript 单元测试ember并发任务和产量

Javascript 单元测试ember并发任务和产量,javascript,unit-testing,ember.js,ember-testing,ember-concurrency,Javascript,Unit Testing,Ember.js,Ember Testing,Ember Concurrency,我们的项目中有很多代码由于ember并发任务而没有涵盖 对于包含以下内容的控制器,是否有一种简单的单元测试方法: export default Controller.extend({ updateProject: task(function* () { this.model.project.set('title', this.newTitle); try { yield this.model.project.save();

我们的项目中有很多代码由于ember并发任务而没有涵盖

对于包含以下内容的控制器,是否有一种简单的单元测试方法:

export default Controller.extend({
    updateProject: task(function* () {
        this.model.project.set('title', this.newTitle);
        try {
            yield this.model.project.save();
            this.growl.success('success');
        } catch (error) {
            this.growl.alert(error.message);
        }
    })
});```

您可以通过调用
someTask.perform()
对这样的任务进行单元测试。对于给定的任务,您可以存根您需要的内容,以便对其进行彻底测试:

test('update project task sets the project title and calls save', function(assert) {

  const model = {
    project: {
      set: this.spy(),
      save: this.spy()
    }
  };
  const growl = {
    success: this.spy()
  };

  // using new syntax
  const controller = this.owner.factoryFor('controller:someController').create({ model, growl, newTitle: 'someTitle' });

  controller.updateProject.perform();

  assert.ok(model.project.set.calledWith('someTitle'), 'set project title');
  assert.ok(growl.success.calledWith('success'), 'called growl.success()');
});
这是使用来自和的间谍从测试上下文访问sinon,但这些对于单元测试不是必需的。您可以使用断言而不是间谍来存根模型和服务等:

const model = {
  project: {
    set: (title) => {
      assert.equal(title, 'someTitle', 'set project title');
    },
    save: () => {
      assert.ok(1, 'saved project');
    }
  }
};

要测试可以从stubbed
model.project.save()方法抛出的捕获:

const model = {
  project: {
    ...
    save: () => throw new Error("go to catch!")
  }
};