Home

# Class goog.testing.PropertyReplacer

Helper class for stubbing out variables and object properties for unit tests. This class can change the value of some variables before running the test cases, and to reset them in the tearDown phase. See googletest.StubOutForTesting as an analogy in Python: http://protobuf.googlecode.com/svn/trunk/python/stubout.py Example usage:

    var stubs = new goog.testing.PropertyReplacer();

    function setUp() {
    // Mock functions used in all test cases.
    stubs.set(Math, 'random', function() {
    return 4;  // Chosen by fair dice roll. Guaranteed to be random.
    });
    }

    function tearDown() {
    stubs.reset();
    }

    function testThreeDice() {
    // Mock a constant used only in this test case.
    stubs.set(goog.global, 'DICE_COUNT', 3);
    assertEquals(12, rollAllDice());
    }

Constraints on altered objects:

- DOM subclasses aren't supported.
- The value of the objects' constructor property must either be equal to the real constructor or kept untouched.

Instance Method Summary
| `remove(?Object obj, string key)` Deletes the key from the object while saving its original value.
| `replace(?Object obj, string key, <Any Type> value)` Changes an existing value in an object to another one of the same type while saving its original state. The advantage of {@code replace} over {@link #set} is that {@code replace} protects against typos and erroneously passing tests after some members have been renamed during a refactoring.
| `reset()` Resets all changes made by goog.testing.PropertyReplacer.prototype.set.
| `set(?Object obj, string key, <Any Type> value)` Adds or changes a value in an object while saving its original state.
| `setPath(string path, <Any Type> value)` Builds an object structure for the provided namespace path. Doesn't overwrite those prefixes of the path that are already objects or functions.

Static Method Summary
| `deleteKey_(?Object obj, string key)` Deletes a key from an object. Sets it to undefined or empty string if the delete failed.
| `hasKey_(?Object obj, string key) ⇒ boolean` Tells if the given key exists in the object. Ignores inherited fields.