Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 Sinon异步测试:在推送发生之前未填充数组_Javascript_Arrays_Angularjs_Asynchronous_Sinon - Fatal编程技术网

Javascript Sinon异步测试:在推送发生之前未填充数组

Javascript Sinon异步测试:在推送发生之前未填充数组,javascript,arrays,angularjs,asynchronous,sinon,Javascript,Arrays,Angularjs,Asynchronous,Sinon,我在Sinon&Chai为AngularJS应用程序编写测试。我做了$httpbackend请求,并且我有一个假的用户数组-backendUsersResponse。它在my.spec.js中可用,但当我调用函数openSettings时它还没有填充,因此我的用户在我的控制器中是一个空数组 在哪里我可以告诉我的代码等待数组被填充?如何测试像这样的异步javascript内容 提前谢谢 控制器代码: export default class UserAccountsController {

我在Sinon&Chai为AngularJS应用程序编写测试。我做了
$httpbackend
请求,并且我有一个假的用户数组-
backendUsersResponse
。它在my.spec.js中可用,但当我调用函数
openSettings
时它还没有填充,因此我的用户在我的控制器中是一个空数组

在哪里我可以告诉我的代码等待数组被填充?如何测试像这样的异步javascript内容

提前谢谢

控制器代码:

export default class UserAccountsController {
    constructor(UserModel, userSettingsDialog) {

      this.UserModel = UserModel;
      this.userSettingsDialog = userSettingsDialog;

      this.users = [];

      UserModel.query()
          .then((users) => {
              this.users = users;
          });

    }

    openSettings(user) {

       const userToUpdate = user || new this.UserModel();

       this.userSettingsDialog.openDialog(userToUpdate)
           .then((data) => {
               const cmd = data.value;

               if (cmd === 'saveSettings') {
                   const isNew = angular.isUndefined(userToUpdate.id);
                   userToUpdate.$save();
                   if (isNew) {
                      this.users.push(userToUpdate);
                   }
               }
           });
      }

  }
UserAccountsController.$inject = [ 'UserModel', 'userSettingsDialog'];
试验

从'chai'导入{expect};
从“sinon/pkg/sinon”进口sinon;
描述('userAccounts Controller',()=>{
"严格使用",;
beforeach(angular.mock.module('myproject'));
让$httpBackend=null;
设$q=null;
让UserModel=null;
让userSettingsDialog=null;
beforeach(注入(函数($httpBackend,u UserModel,$q){
$httpBackend=\$httpBackend\;
UserModel=\u UserModel;
$q=$q;
}));
描述('openSettings',()=>{
让$controller;
让后端用户响应;
每次之前(注入(函数($controller_u41;){
用户设置对话框={
openDialog:sinon.stub(),
};
$controller=$controller;
后端用户响应={
用户:[
{
id:1,
姓名:'约翰',
角色:'管理员',
},
{
id:2,
名字:“迭戈”,
角色:'编辑',
},
],
};
}));
它('应该检查新用户是否被推送到数组',()=>{
//安排
常量ctrl=$controller('UserAccountsController'{
userSettingsDialog:userSettingsDialog,
});
const user=新用户模型({
名称:'着陆器',
});
常数数据={
值:“保存设置”,
};
$httpBackend.expectGET('api/users').Response(200,backendUsersResponse);
userSettingsDialog.openDialog.withArgs(user).returns($q.resolve(data));
$httpBackend.expectPOST('api/用户')。响应(200,用户);
//表演
ctrl.openSettings(用户);
$httpBackend.flush();
//断言
expect(usersetingsdialog.openDialog).to.have.been.called;
expect(user.name).to.equal('Lander');
expect(ctrl.users).not.to.be.empty;
expect(ctrl.users.length).to.be(3)//
import { expect } from 'chai';
import sinon from 'sinon/pkg/sinon';

describe('userAccounts Controller', () => {
   'use strict';

   beforeEach(angular.mock.module('myproject'));

   let $httpBackend = null;
   let $q = null;
   let UserModel = null;
   let userSettingsDialog = null;

   beforeEach(inject(function(_$httpBackend_, _UserModel_, _$q_) {
       $httpBackend = _$httpBackend_;
       UserModel = _UserModel_;
       $q = _$q_;
   }));

   describe('openSettings', () => {
      let $controller;
      let backendUsersResponse;

      beforeEach(inject(function(_$controller_) {
          userSettingsDialog = {
              openDialog: sinon.stub(),
          };

          $controller = _$controller_;

          backendUsersResponse = {
              users: [
                  {
                      id: 1,
                      name: 'John',
                      role: 'admin',
                  },
                  {
                      id: 2,
                      name: 'Diego',
                      role: 'editor',
                  },
              ],
          };
      }));

      it('should check if new user is pushed to an array', () => {
        // arrange
        const ctrl = $controller('UserAccountsController', {
            userSettingsDialog: userSettingsDialog,
        });

        const user = new UserModel({
            name: 'Lander',
        });
        const data = {
            value: 'saveSettings',
        };

        $httpBackend.expectGET('api/users').respond(200,      backendUsersResponse);

        userSettingsDialog.openDialog.withArgs(user).returns($q.resolve(data));

        $httpBackend.expectPOST('api/users').respond(200, user);

        // act
        ctrl.openSettings(user);

        $httpBackend.flush();

        // assert
        expect(userSettingsDialog.openDialog).to.have.been.called;
        expect(user.name).to.equal('Lander');
        expect(ctrl.users).not.to.be.empty;
        expect(ctrl.users.length).to.be(3); //<-- this one fails, array length is always 2, user is not added

      });
   });
});