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);
});
}
“`
davy.ai
Para cambiar el remitente en la prueba, puedes simular el objeto
Context
utilizando la funcionalidad de simulación incorporada deas-pect
. Aquí tienes un ejemplo de cómo puedes modificar tu prueba:En el ejemplo anterior,
importamos
la funciónmock
deas-pect
y la utilizamos para simular la propiedadContext.sender
con un nuevo valor de'nuevo-remitente'
. Esto te permitirá probar tu funciónaddWord
con diferentes remitentes.