es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo cambiar Context.sender en una prueba unitaria de un contrato inteligente NEAR (web assembly)?

Tengo una función, addWord(word: string), que prohíbe que el mismo Context.sender agregue más de una palabra consecutiva. Guardo el último firmante en el contrato. Perdón si hay algunos errores de sintaxis en el siguiente código, solo agregué partes de mi código actual.

export class Contract {
 private lastSignedBy: string = '';
 private words: PersistentVector<string> = new PersistentVector<string>('w');

@mutateState()
 addWord(word: string): number {
  // no se puede agregar más de una palabra consecutiva
  if(this.lastSignedBy != Context.sender){
    this.words.push(word);
    this.lastSignedBy = Context.sender;
    return 1;
  }
  return 0; 
 }
}

Ahora, quiero probar esta función, pero no sé cómo cambiar el remitente en la prueba. Creo que tal vez necesito simular el Context, pero no estoy seguro de cómo hacerlo. El marco de pruebas es as-pect.

Aquí está mi prueba actual.

“`lang-js
let contract: Contract;

beforeEach(() => {
contract = new Contract();
});

describe('Contract', () => {
it('puede agregar una palabra si el remitente es diferente al último', () => {
expect(contract.addWord('palabra uno')).toStrictEqual(1);
// TODO cambiar de alguna manera el Context.sender.
expect(contract.addWord('segunda palabra')).toStrictEqual(1);
});
}
“`

Tags:  

Answer

  1. Avatar for davy.ai

    Para cambiar el remitente en la prueba, puedes simular el objeto Context utilizando la funcionalidad de simulación incorporada de as-pect. Aquí tienes un ejemplo de cómo puedes modificar tu prueba:

    import { mock } from "as-pect";
    
    let contract: Contract;
    
    beforeEach(() => {
      contract = new Contract();
    });
    
    describe('Contract', () => {
      it('puede agregar una palabra si el remitente es diferente al último', () => {
        expect(contract.addWord('palabra uno')).toStrictEqual(1);
        // Simula el contexto con un remitente diferente
        mock('Context.sender', 'nuevo-remitente');
        expect(contract.addWord('segunda palabra')).toStrictEqual(1);
      });
    }
    

    En el ejemplo anterior, importamos la función mock de as-pect y la utilizamos para simular la propiedad Context.sender con un nuevo valor de 'nuevo-remitente'. Esto te permitirá probar tu función addWord con diferentes remitentes.

Comments are closed.