在测试期间更改 VMContext 属性
Changing VMContext attributes during tests
我想编写需要能够在测试中更改前任帐户的测试。但是我找不到动态更改 VMContext 的方法。
fn get_context(value: u128) -> VMContext {
VMContext {
current_account_id: "alice.near".to_string(),
signer_account_id: "bob.near".to_string(),
signer_account_pk: vec![0, 1, 2],
predecessor_account_id: "carol.near".to_string(),
input: vec![],
block_index: 0,
account_balance: 0,
is_view: false,
storage_usage: 0,
block_timestamp: 123789,
attached_deposit: value,
prepaid_gas: 10u64.pow(9),
random_seed: vec![0, 1, 2],
output_data_receivers: vec![],
}
}
#[test]
fn test_market_creation() {
let mut context = get_context(500000000);
let config = Config::default();
testing_env!(context, config);
let mut contract = MyContract::default();
contract.do_something(); // Fire method with "carol.near" as predecessor
// Switch account to "bob.near"
contract.do_something(); // Fire method with "bob.near" as predecessor
}
VMContext 中的字段是 public。应该可以更改其任何字段:
#[test]
fn test_market_creation() {
let mut context = get_context(500000000);
context.predecessor_account_id = "carol.near".to_string();
let config = Config::default();
testing_env!(context, config);
let mut contract = MyContract::default();
contract.do_something(); // Fire method with "carol.near" as predecessor
// Switch account to "bob.near"
contract.do_something(); // Fire method with "bob.near" as predecessor
}
当您在同一测试中使用新上下文再次调用“testing_env!”时,它将保留旧存储,但使用新上下文。
我想编写需要能够在测试中更改前任帐户的测试。但是我找不到动态更改 VMContext 的方法。
fn get_context(value: u128) -> VMContext {
VMContext {
current_account_id: "alice.near".to_string(),
signer_account_id: "bob.near".to_string(),
signer_account_pk: vec![0, 1, 2],
predecessor_account_id: "carol.near".to_string(),
input: vec![],
block_index: 0,
account_balance: 0,
is_view: false,
storage_usage: 0,
block_timestamp: 123789,
attached_deposit: value,
prepaid_gas: 10u64.pow(9),
random_seed: vec![0, 1, 2],
output_data_receivers: vec![],
}
}
#[test]
fn test_market_creation() {
let mut context = get_context(500000000);
let config = Config::default();
testing_env!(context, config);
let mut contract = MyContract::default();
contract.do_something(); // Fire method with "carol.near" as predecessor
// Switch account to "bob.near"
contract.do_something(); // Fire method with "bob.near" as predecessor
}
VMContext 中的字段是 public。应该可以更改其任何字段:
#[test]
fn test_market_creation() {
let mut context = get_context(500000000);
context.predecessor_account_id = "carol.near".to_string();
let config = Config::default();
testing_env!(context, config);
let mut contract = MyContract::default();
contract.do_something(); // Fire method with "carol.near" as predecessor
// Switch account to "bob.near"
contract.do_something(); // Fire method with "bob.near" as predecessor
}
当您在同一测试中使用新上下文再次调用“testing_env!”时,它将保留旧存储,但使用新上下文。